C#中的多维数据结构

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)