我正在尝试使用两列创建二维int数组,但行数未知。我知道为了创建2D数组本身,我做了以下几点:
List<List<int>> myList = new List<List<int>>();
但是如何修改它以指定列数?我该如何向这个数组添加一行?
答案 0 :(得分:2)
无法创建具有未知数量元素的2D数组(或任何其他类型的数组)。初始化后,您必须提供多个元素。
多维数组的语法如下:
var arr = new int[k, l, n,...]
您可以创建所谓的锯齿状数组,即数组数组,并在循环中对其进行初始化。您仍然需要使用许多子数组初始化它,然后填充给定长度的子数组:
var arr = new int[][n];
for (int i = 0; i < arr.Length; i++)
{
arr[i] = new int[subArrayLength];
}
你实际做的是列表列表,它可以包含任意长度的任意数量的“行”。您可以通过List方法Add()将特定长度的新列表添加到外部列表,并且可以将元素添加到任何内部List中。
所以基本上要添加“行”,您需要以下内容:
List<List<int>> table = new List<List<int>>();
table.Add(Enumerable.Repeat(defaultValue, numberOfColumns).ToList());
要添加列,您需要这样的内容:
foreach (var row in table)
{
row.Add(defaultValue);
}
似乎你想要模拟表结构 - 为此我建议创建一个类来从上面封装表逻辑,这样任何添加行都会导致添加当前numberOfColumns大小的外部List并添加列将导致向所有外部列表添加元素。
然而如果你需要一个固定数量的列,你可以使用的最好的替代方法是声明一个新的类,你的列映射到类的属性,然后简单地声明一个List就像它是在下面的answer中描述为@ shash678指向
答案 1 :(得分:2)
您可以使用int数组列表。 List将表示行,List中的每个int数组都是一行。每个数组的长度等于列数。
List<int[]> rows = new List<int[]>();
int[] row = new int[2];
row[0] = 100;
row[1] = 200;
rows.Add(row);
只要每个int数组的长度为2(int[] row = new int[2]
),所有行都将有两列。 List可以通过这种方式添加任意数量的int数组。
答案 2 :(得分:1)
原始答案:考虑使用List<Tuple<int, int>>
。
说明:首先,int[]
不是List<>
。根据您的问题的精神,您似乎需要将几个数据单元与有限大小组合在一起,就像表中的记录一样。您可以决定使用更具描述性的名称创建POCO(这将增加代码可读性和帮助语义),使用固定大小的数组或使用元组。由于没有提到需要可变性,并且内部“数组”的大小将被修复,我会建议一个元组。通过类型安全,您将确保添加到元组列表中的每个新对象的大小和形状是正确的。
你的第一个问题和第二个问题将得到关注,至于第3个问题,请参阅:Tuple Pair
e.g。 list.Add(Tuple.Create<int,int>(1,1));
答案 3 :(得分:0)
我觉得这些答案正在引导你走上一条糟糕的道路。在学习如何编程时,您还应该考虑最佳实践。在这种情况下,您的代码就是您应该使用的代码。如果你可以避免设置明确的数组大小,你应该(在我看来)。列表是为此目的而创建的。此示例应用程序说明了如何在此方案中正确使用列表。我个人的意见是尽可能避免使用数组。
int someNumberOfRow = 10;//This is just for testing purposes.
Random random = new Random();//This is just for testing purposes.
List<List<int>> myList = new List<List<int>>();
//add two elements to the an arraylist<int> then add this arraylist to myList arraylist
for(int i = 0; i < someNumberOfRow; i++)
{
//Create inner list and add two ints to it.
List<int> innerList = new List<int>();
innerList.Add(random.Next());
innerList.Add(random.Next());
//Add the inner list to myList;
myList.Add(innerList);
}
//This prints myList
for(int i = 0; i < myList.Count; i++)
{
Console.WriteLine((i + 1) + ": " + myList[i][0] + " - " + myList[i][1]);
}
Console.WriteLine("\n\n");
//If the app may scale in the future, I suggest you use an approach similar to this
foreach(List<int> sublist in myList)
{
foreach(int columns in sublist)
{
Console.Write(columns + " ");
}
Console.WriteLine();
}
Console.ReadLine();