映射多维数组

Enr*_*ent 4 c# linq arrays multidimensional-array

我有以下课程

class Tile
{
    public int height;
    public int terrain;
}
Run Code Online (Sandbox Code Playgroud)

我有一个2D数组的Tiles

Tile[,] area = new Tile[5,5];
Run Code Online (Sandbox Code Playgroud)

如何将我的区域从a映射Tile[,]到a int[,],只保存高度?

我试过这样做:

area.Select(tile => tile.height)
Run Code Online (Sandbox Code Playgroud)

但显然C#多维数组并没有实现IEnumerable.

我怎么能解决这个问题?

Eri*_*ert 8

我怎么能解决这个问题?

通过编写代码.没有"选择"可行,所以自己制作:

static class Extensions 
{
  public static R[,] Select<T, R>(this T[,] items, Func<T, R> f) 
  {
    int d0 = items.GetLength(0);
    int d1 = items.GetLength(1);
    R[,] result = new R[d0, d1];
    for (int i0 = 0; i0 < d0; i0 += 1)
      for (int i1 = 0; i1 < d1; i1 += 1)
        result[i0, i1] = f(items[i0, i1]);
    return result;
  }
Run Code Online (Sandbox Code Playgroud)

现在你有了你想要的扩展方法.

练习:

  • 哪个标准LINQ序列运算符适合多维数组,哪些不适应?
  • 您是否希望在多维数组上看到不是标准LINQ运算符但可以实现为扩展方法的运算符?