C# 使用LINQ将阵列高效转换为二维阵列
我想在C中以一种性能良好的方式完成下面的工作,最好使用LINQ 数组[Length]到数组[Length/Row][Row],其中Row和Length是变量。您可以使用在以下的n维数组之间高效转换: 这充分利用了多维不参差不齐的事实!阵列由CLR在内存中连续排列 对于不可blittable类型,只需使用一些好的ol'For循环。您可以使用它在n维数组之间高效地转换: 这充分利用了多维不参差不齐的事实!阵列由CLR在内存中连续排列C# 使用LINQ将阵列高效转换为二维阵列,c#,linq,multidimensional-array,C#,Linq,Multidimensional Array,我想在C中以一种性能良好的方式完成下面的工作,最好使用LINQ 数组[Length]到数组[Length/Row][Row],其中Row和Length是变量。您可以使用在以下的n维数组之间高效转换: 这充分利用了多维不参差不齐的事实!阵列由CLR在内存中连续排列 对于不可blittable类型,只需使用一些好的ol'For循环。您可以使用它在n维数组之间高效地转换: 这充分利用了多维不参差不齐的事实!阵列由CLR在内存中连续排列 对于非blittable类型,只需使用一些好的ol'For循环。这
对于非blittable类型,只需使用一些好的ol'For循环。这不是二维数组,而是锯齿状数组。我假设您指的是数组[长度/行,行] LINQ中没有任何东西可以做到这一点,因此如果您想使用它,您将有一点开销。最有效的方法是直接编码:
public T[,] MakeRows<T>(T[] values, int rowSize) {
T[,] result = new T[values.Length / rowSize, rowSize];
int row = 0, col = 0;
foreach (T value in values) {
resul[row, col] = value;
if (++col == rowsize) {
col = 0;
row++;
}
}
return result;
}
注意:该方法假定项目可以均匀地划分为行。这不是二维数组,而是锯齿状数组。我假设您指的是数组[长度/行,行] LINQ中没有任何东西可以做到这一点,因此如果您想使用它,您将有一点开销。最有效的方法是直接编码:
public T[,] MakeRows<T>(T[] values, int rowSize) {
T[,] result = new T[values.Length / rowSize, rowSize];
int row = 0, col = 0;
foreach (T value in values) {
resul[row, col] = value;
if (++col == rowsize) {
col = 0;
row++;
}
}
return result;
}
注意:该方法假设项可以均匀地划分为行。您能举一个例子说明您试图转换的数据的外观吗?LINQ to Objects处理IEnumerable,而不是直接处理数组。二维数组根本不受支持。您能举一个例子说明您试图转换的数据的外观吗?LINQ to Objects处理IEnumerable,而不是直接处理数组。实际上根本不支持二维数组。