C#中的多维数据结构

时间:2009-12-04 23:17:34

标签: c# .net 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;
        }
    }

这不起作用(抛出ArgumentOutOfRangeException)。 C#中是否有多维结构允许我通过索引访问成员?

5 个答案:

答案 0 :(得分: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);
    }
}

请注意,设置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));
}

再次注意Enumerable.Repeat(new List<int>(), 10)不起作用,因为它会在同一个列表中添加10个引用。

使用Linq的另一种方法:

List<List<int>> results = Enumerable.Repeat(0, 10)
    .Select(i => Enumerable.Repeat(0, 10).ToList())
    .ToList();

(未使用的参数i是必要的,以确保您不会如上所述十次引用相同的列表。)

最后,要访问元素,您可以使用之前使用的符号。添加元素后,可以按如下所示读取或修改它们:

for (int i = 0; i < 10; i++)
{
    for (int j = 0; j < 10; j++)
    {
        results[i][j] = 2;
        int x = results[i][j];
    }
}

答案 1 :(得分:3)

如果您事先知道结构的尺寸,并且您不打算添加或删除元素,那么2D数组听起来就像您的那样:

int[,] n = new int[10, 20];
for (int i = 0; i < 10; ++i) {
    for (int j = 0; j < 10; ++j) {
        n[i, j] = ...
    };
};

答案 2 :(得分:2)

您必须创建列表并使用零初始化它们,然后才能开始索引它们。

    List<List<int>> results = new List<List<int>>();

    for (int i = 0; i < 10; i++)
    {
        results.Add(new List<int>(Enumerable.Repeat(0, 10)));
    }

答案 3 :(得分:2)

你必须实际上1)创建每个内部列表,并且2)将它们设置为该大小。

var Results = Enumerable.Range(0, 10).Select(i => Enumerable.Repeat(0, 10).ToList()).ToList();
但是,我有点像Linq瘾君子。

答案 4 :(得分:0)

您可以使用数据表并添加列和行吗?然后,您就可以按名称或索引引用它们。