Bra*_*ble 1 .net c# data-structures
如何在C#中创建多维数据结构?
在我看来,它的工作原理如下:
List<List<int>> results = new List<List<int>>();
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
results[i][j] = 0;
}
}
Run Code Online (Sandbox Code Playgroud)
这不起作用(抛出一个ArgumentOutOfRangeException).C#中是否存在多维结构,允许我通过索引访问成员?
Zoo*_*oba 10
这里的问题是List不会自动创建元素.要初始化List<List<T>>你需要这样的东西:
List<List<int>> results = new List<List<int>>();
for (int i = 0; i < 10; i++)
{
results.Add(new List<int>());
for (int j = 0; j < 10; j++)
{
results[i].Add(0);
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,设置Capacity不够,您需要调用Add所需的次数.或者,您可以使用Linq的Enumerable类简化操作:
List<List<int>> results = new List<List<int>>();
for (int i = 0; i < 10; i++)
{
results.Add(new List<int>());
results[i].AddRange(Enumerable.Repeat(0, 10));
}
Run Code Online (Sandbox Code Playgroud)
再次注意,这Enumerable.Repeat(new List<int>(), 10)将不起作用,因为它将向同一列表添加10个引用.
使用Linq的另一种方法:
List<List<int>> results = Enumerable.Repeat(0, 10)
.Select(i => Enumerable.Repeat(0, 10).ToList())
.ToList();
Run Code Online (Sandbox Code Playgroud)
(未使用的参数i是必要的,以确保您不会如上所述十次引用相同的列表.)
最后,要访问元素,您可以使用之前使用的符号.添加元素后,可以按如下所示读取或修改它们:
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
results[i][j] = 2;
int x = results[i][j];
}
}
Run Code Online (Sandbox Code Playgroud)