我正在努力制作一个参差不齐的清单。它会根据两个变量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.很明显,我的逻辑略显偏差。任何帮助赞赏。谢谢。
答案 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()
似乎每次迭代都使用相同的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});
}
}