c# - 使用 LINQ 获取多维数组的分区(N 维数组的 (N-1) 维实例)

标签 c# linq

我想从 3 维数组中获取一个 2 维数组。假设我有一个维度为 [10,10,10]
的双 3d 数组 A3 我需要得到一个二维数组 A2 = A3[:,5,:],即第二维的索引等于例如5.

如果我想获得二维数组 A2(即二维数组的第一个实例)的分区(例如 A1=A2[2,:] 的类型),我可以这样做(第一维的索引例如设置为 2):

double[] A1 = Enumerable.Range(0,A2.Length).Select(x=>A2[2,x]).ToArray();

如何从 3 到 2(或通常从 N 到 N-1)维度做到这一点?

编辑。输入示例:

double[,,] A3 = new double[2,3,4]{
            {
                {4,3,2,1},
                {5,4,3,2},
                {6,5,4,3}
            },
            {
                {1,2,3,4},
                {2,3,4,5},
                {3,4,5,6}
            }
        };

结果数组 A2=A3[:,1,:] 必须包含以下内容:{ {5,4,3,2},{2,3,4,5} }

最佳答案

LINQ 通常不能很好地处理多维数组。这些操作本质上是一维的。它在嵌套的一维数组中表现得更好,所以如果您想返回深度为 2 的锯齿状数组,即 double[][] 而不是 double[,] LINQ 是更合适的工具。

public static T[][] GetPlane<T>(T[, ,] source, int secondDimensionValue)
{
    return Enumerable.Range(0, source.GetLength(0))
        .Select(i => Enumerable.Range(0, source.GetLength(2))
            .Select(j => source[i, secondDimensionValue, j])
            .ToArray())
        .ToArray();
}

关于c# - 使用 LINQ 获取多维数组的分区(N 维数组的 (N-1) 维实例),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15556358/

相关文章:

c# - 尝试添加分数钱或水时出错

c# - 通用自定义 linq 过滤器

c# - LINQ 不同查询

javascript - 从 JavaScript 函数触发 c# 事件

c# - datagridview 文本框列的逗号分隔符

c# - ASP.NET Core MVC 3 中的最大请求表单大小问题

linq - linq 与 linq 到 sql 不同吗?

c# - If Else 在 linq 中使用匿名对象

c# - EF Core 查询 - 有没有办法按字母顺序查找下一个和上一个项目?

c# - 为什么 Count 不是无符号整数?