启动锯齿状列表

时间:2013-09-03 22:17:53

标签: c# list

我正在努力制作一个参差不齐的清单。它会根据两个变量int来填充值:rows和cols。

当行= 4和cols = 3时,模式是这样填充列表:

00,
10,
20,
01,
11,
21,
02,
12,
22,
03,
13,
23

每个双位数字是包含列的子列表,然后是行。 这就是我所拥有的:

namespace WindowsFormsApplication11
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            defineCellPositionsList();
            displayCellPositionsList();
        }

        int rows = 4;
        int cols = 3;

        private List<List<int>> CellPositionsList = new List<List<int>>();

        private void defineCellPositionsList()
        {
            for (int i = 0; i < (rows * cols); i++)
            {
                List<int> sublist = new List<int>();
                for (int row = 0; row < rows; row++)
                {
                    for (int col = 0; col < cols; col++)
                    {
                        sublist.Add(col);
                        sublist.Add(row);
                    }
                }
                CellPositionsList.Add(sublist);
            }
        }

        private void displayCellPositionsList()
        {
            for (int i = 0; i < CellPositionsList.Count; i++)
            {
                label1.Text += CellPositionsList[i][0];
                label1.Text += CellPositionsList[i][1] + "\n";
            }
        }
    }
}

锯齿状列表应该有12个子列表。子列表应该有2个值。这很有效。但是每个值都是0.很明显,我的逻辑略显偏差。任何帮助赞赏。谢谢。

2 个答案:

答案 0 :(得分:2)

问题不是每个子列表都是{ 0, 0 },而是每个子列表都是完整的24个项的子列表,恰好以数字{{1}开头}}。您可以通过选中0, 0来验证这一点。

该错误是由于创建列表时循环过多。你不需要三个循环,其中两个是正确的:

CellPositionsList[i].Count

并且没有必要写下所有这些简写,因为LINQ提供了更好的替代方案:

private void defineCellPositionsList()
{
    for (int row = 0; row < rows; row++)
    {
        for (int col = 0; col < cols; col++)
        {
            CellPositionsList.Add(new List<int> { col, row });
        }
    }
}

答案 1 :(得分:0)

defineCellPositionsList()似乎每次迭代都使用相同的sublistsublist中的前两个元素是0, 0,但最终总共添加了24个。

要解决此问题,请在第一个循环中移动sublist的声明。

我确实在子列表中看到了很多非零值。值得注意的是,您似乎将所有值都放在displayCellPositionsList中的单个标签中。

我完全错了。

但这个东西是对的。我已经执行了它的确有效。 (假设我明白你要做什么,它仍然有点模糊)

如果你有一个行列表和一个列列表,最后是一个2列表的坐标,那么你真的有3组嵌套列表。我不确定你到底在做什么,或者为什么你想要那样,但如果那是你真正想要的,那么你的CellPositionsList确实需要List<List<List<int>>>。如果这样做,您可以使用以下代码:

for (int row = 0; row < rows; row++) {
    CellPositionsList.Add(new List<List<int>>());
    for (int col = 0; col < cols; col++) {
        CellPositionsList[row].Add(new List<int> {row, col});
    }
}