如何将List<List<int>>转换为二维数组

39

如何将一个列表转换为类型为int[][]的数组,有什么最佳方法?

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

4
从技术上讲,一个 int[][] 并不是一个多维数组(http://msdn.microsoft.com/en-us/library/2yd9wwz4(v=vs.71).aspx),而是一个数组的数组。 - StriplingWarrior
2
类型为 int[][] 的数组不是多维数组,而只是一个数组的数组。二维数组应该是 int[,] - svick
1
@StriplingWarrior:也被称为锯齿数组。http://msdn.microsoft.com/zh-cn/library/2s05feca(v=vs.80).aspx - Alex Bagnolini
1
int[][] 确实有两个维度。正确的命名取决于上下文。 - H H
5个回答

75
int[][] arrays = lst.Select(a => a.ToArray()).ToArray();

7
您可以使用 lst.Select(Enumerable.ToArray).ToArray() 进行操作。 - Random832
9
如果我们需要在int[,]数组中进行赋值,这是否可行? - Shekhar Rai
也许你可以这样做:var list = new List<List<object>>(); object[,] array = new object[N, M]; for (int i = 0; i < N; i++) for (int j = 0; j < M; j++) array[i, j] = list[i][j];这样你就会得到一个 object[,],其中 N 和 M 分别是外部和内部列表的维度。 - aibars
@ShekharRai - 将不规则列表映射到二维数组并不是非常容易。 - Enigmativity

6
使用LINQ很简单:
lst.Select(l => l.ToArray()).ToArray()

如果你真的想要一个二维数组(int[,],而不是int[][]),那么这将更加困难,最好的解决方案可能是使用嵌套的for循环。

10
将近6年后,我猜如果我想要一个int[,],除了运行显式循环之外没有其他办法了? - ForeverLearning

2
你可以轻松使用 LINQ 完成它。
int[][] arrays = lst.Select(a => a.ToArray()).ToArray();

但是如果你想要另一种方法,你可以通过循环遍历列表并手动生成2D数组。 如何循环遍历嵌套列表

-1

没有库函数可以做到这一点。

您需要使用循环来完成此操作。

int[][] newlist = new int[lst.Size][];
for (int i = 0; i < lst.Size; i++)
{
    List<int> sublist = lst.ElementAt(i);
    newlist[i] = new int[sublis.Size];
    for (int j = 0; j < sublist.Size; j++)
    {
        newlist[i][j] = sublist.ElementAt(j);
    }
}

就是这样!


-1

如果您在使用List<List<int>>时没有任何限制,可以使用List<int[]>,然后在列表对象末尾使用.ToArray()将其转换为数组。

首先将List<List<int>>转换为List<int[]>的示例:

    List<int[]> listOfArray=new List<int[]>();
    List<List<int>> yourList=[someValue];
    foreach(var listItem in yourList){
        listOfArray.Add(listItem.ToArray());
    }

List<int[]> 转换成 int[][] 的示例:

  int[][] jaggedArray= listOfArray.ToArray(); //voila you get jagged array or array of array

这并没有回答问题。显然是List<List<int>>。你不能只回答一个“类似”的问题。 - Enigmativity
没错,这个问题的解决方案已经被其他用户探讨并给出了,所以我尝试提供一些其他的替代方法来得到答案。无论如何,感谢您指出这一点,如果对任何人没有帮助,我会删除答案。 - kaszm
1
这是一个替代性的问题,你正在回答它。这并没有回答实际提出的问题。如果你展示了如何从List<List<int>>转换为List<int[]>,那么你可能会有所收获。 - Enigmativity

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接