启动锯齿状列表

本文关键字:列表 锯齿状 启动 | 更新日期: 2023-09-27 18:30:08

我正在尝试制作一个锯齿状列表。它填充了取决于两个变量int的值:行和列。

当行=4和列=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。很明显,我有点不符合逻辑。感谢您的帮助。谢谢

启动锯齿状列表

问题不在于每个子列表都是{ 0, 0 },而在于每个子列表是全部24个项目的子列表,恰好以数字0, 0开头。您可以通过检查CellPositionsList[i].Count来验证这一点。

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

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

而且也没有必要写所有这些长手,因为LINQ提供了一个更好的IMHO替代方案:

CellPositionsList = Enumerable.Range(0, rows)
    .SelectMany(r => Enumerable.Range(0, cols).Select(c => new List<int> {c,r}))
    .ToList();

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});
    }
}