一系列列表

时间:2015-01-13 17:42:58

标签: c# arrays list

我正在尝试制作一系列列表列表,整件事令我困惑。我希望数组更大,所以我做了List<List<int>>[] arr = new List<List<int>>[5],但在添加几个项目之后,我需要通过arr.ElementAt(1).ElementAt(1)[1]访问它们,但不应该是另一种方式周围([1]在开始时)?

我尝试做的只是填充整个三维,但当我尝试通过arr[1].ElementAt(1).Add(...)arr.ElementAt(1)[1].Add(...)添加最后一个维度时(不确定要使用哪个维度,两者都没有工作)我得到一个恐怖说我试图将值添加到空列表

3 个答案:

答案 0 :(得分:2)

您需要在使用之前实例化List<List<int>>

arr[0] = new List<List<int>>();
arr[0].Add(new List<int>());
arr[0][0].Add(5);
///etc...

另一个注意事项:您是否了解我在[]上使用List括号的方式?支持

答案 1 :(得分:0)

new List<List<int>>[5]

实际上是一个List of List of int的数组,但你仍然可以在它上面调用ElementAt(),因为数组实现了IEnumerable。

答案 2 :(得分:0)

以下显示了与所需数据结构的不同交互,以添加和验证元素。

var arr = new List<List<int>>[]
    {
        new List<List<int>>()
        {
            new List<int>() { 1, 3, 5 },
            new List<int>() { 2, 4, 6 },
        },
        new List<List<int>>() { new List<int>() },
        new List<List<int>>() { new List<int>() },
        new List<List<int>>() { new List<int>() },
        new List<List<int>>() { new List<int>() },
    };
Assert.AreEqual(4, arr[0].ElementAt(1).ElementAt(1));
Assert.AreEqual(3, arr[0].ElementAt(1).Count);
arr[0].ElementAt(1).Add(8);
Assert.AreEqual(4, arr[0].ElementAt(1).Count);
Assert.AreEqual(8, arr[0].ElementAt(1).ElementAt(3));