C#中如何展开不规则数组

10

有没有一种优雅的方式在C#中展开一个二维数组(使用Linq或不使用Linq)?

例如,假设

var my2dArray = new int[][] {
   new int[] {1,2,3},
   new int[] {4,5,6}
};

我希望能够像这样调用某个东西:

my2dArray.flatten()

会产生

{1,2,3,4,5,6}

有任何想法吗?


3
请注意,实际上这是一个不规则数组而不是一个二维数组。因此你不能限制内部数组的大小。除非你删除new int[][3]中的3,否则你的代码将无法编译。 - juharr
@M.kazemAkhgary 你是对的,感谢你指出来 :) - Jeremy Thompson
1个回答

30
您可以使用 SelectMany
var flat = my2dArray.SelectMany(a => a).ToArray();
这将适用于像你的示例中的不规则数组,但不适用于像2D数组那样的数组。
var my2dArray = new [,] { { 1, 2, 3 }, { 1, 2, 3 } };

但在这种情况下,您可以像这样迭代值

foreach(var item in my2dArray)
    Console.WriteLine(item);

好的,这就解决了,完美!我还是有点困惑真正的二维数组,它们似乎不太方便使用... - Cedric Druck
@CedricDruck,二维数组和交错数组的区别在于,交错数组的第二个维度可以变化,而二维数组的两个维度都是固定大小的。请查看此问题以获取更多详细信息。 - juharr
链接的问题证实了...我会坚持使用锯齿数组。我已经在其他多种语言中使用过它们。更好的语法在某些情况下可能有用,但人们可以轻松地在没有它的情况下工作...感谢指点。 - Cedric Druck
@CedricDruck 你可能想要切换到像 List<List<int>> 这样的列表,优点是可以轻松添加和删除元素,但这取决于你想要做什么。 - juharr
1
实际上,在这种情况下,集合的大小是固定的,所以不需要。但一般来说,我更喜欢使用更灵活的结构,比如List或Dictionary。 - Cedric Druck

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