列表列表的数组

Array of Lists of Lists

我正在尝试制作列表列表的数组,整个事情让我感到困惑。我希望数组更大,所以我做了 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(...) 添加最后一个维度时(不确定要使用哪个维度,两者都不起作用)我收到一条警告,说我正在尝试向空列表添加一个值

new List<List<int>>[5]

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

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

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

另一个注意事项:您看到我如何在 List 上使用 [] 括号了吗? 受支持。

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

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));