将一个3D数组的体积展平为一维对象数组

给我一个类型的3D地图,其长度和宽度是均匀的但深度是锯齿状的:

public class Map { T[,][] map; ... } 

返回由2D区域定义的体积内存在的所有类型对象的1D数组以及该区域内所有深度的最佳方法是什么。 例如,我可能有一个数组符号覆盖,如下所示:

 public IEnumerable this[Rectangle area] { get {...} } 

要不就

 public IEnumerable this[int x, int y, int width, int length] { get {...} } 

老实说,我希望有一个快速的LINQ解决方案,但性能优于解决方案的视觉优雅。 返回的展平数组中对象的顺序并不重要。 如果有人对此有任何建议或经验,请分享您的智慧。

或者,如果有我可以使用的另一个数据结构可以执行我不知道的相同function,我很乐意使用它。

如果我的问题不清楚,请询问更多细节。

这可能也有效(没有Linq)

  public IEnumerable this[int x, int y, int width, int length] { get { for (int i = 0; i < length; i++) { for (int j = 0; j < width; j++) { for (int k = 0; k < map[x + i, y + j].Length; k++) { yield return map[x + i, y + j][k]; } } } } } 

你在找这样的东西吗?

 public IEnumerable this[int left, int top, int width, int height] { get { return from x in Enumerable.Range(left, width) from y in Enumerable.Range(top, height) from i in this.map[x, y] select i; } }