【问题标题】:Flatten jagged array in C# [duplicate]在C#中展平锯齿状数组[重复]
【发布时间】:2015-12-11 19:52:45
【问题描述】:

是否有一种优雅的方法可以在 C# 中展平二维数组(使用或不使用 Linq)?

例如假设

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

我想调用类似的东西

my2dArray.flatten()

这会产生

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

有什么想法吗?

【问题讨论】:

  • 请注意,这实际上是一个锯齿状数组,而不是二维数组。因此,您不能限制内部数组的大小。除非您删除 new int[][3] 中的 3,否则您的代码将无法编译。
  • @M.kazemAkhgary 你是对的,谢谢你接我:)

标签: c# linq


【解决方案1】:

您可以使用SelectMany

var flat = my2dArray.SelectMany(a => a).ToArray();

这将适用于您的示例中的锯齿状数组,但不适用于像这样的二维数组

var my2dArray = new [,] { { 1, 2, 3 }, { 1, 2, 3 } };

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

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

【讨论】:

  • 是的,成功了,完美!对于真正的二维数组,我还是有点迷茫,用起来好像不是很方便……
  • @CedricDruck 不同之处在于锯齿状数组的第二维可以变化,而二维数组的两个维都有固定的大小。查看此question 了解更多详情。
  • 链接的问题证实......我会坚持使用锯齿状数组。无论如何,我一直在使用其他多种语言。更好的语法在某些情况下可能有用,但没有它也可以轻松工作...感谢您的指点。
  • @CedricDruck 您可能只想切换到List<List<int>> 之类的列表,其优点是您可以轻松添加和删除元素,但这取决于您想要做什么。
  • 确实,在这种情况下集合的大小是固定的,所以不需要。但总的来说,我更喜欢使用更灵活的结构,例如 List 或 Dictionary。
猜你喜欢
  • 1970-01-01
  • 2016-12-19
  • 2019-10-21
  • 2021-05-04
  • 1970-01-01
  • 2018-05-29
  • 1970-01-01
  • 2011-01-28
  • 1970-01-01
相关资源
最近更新 更多