启动锯齿状列表
本文关键字:列表 锯齿状 启动 | 更新日期: 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()
似乎在每次迭代中使用相同的sublist
。sublist
中的前两个元素是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});
}
}