C# 转换<;T>;[]至<;T>;[]从内部数组中提取1个元素

C# 转换<;T>;[]至<;T>;[]从内部数组中提取1个元素,c#,arrays,multidimensional-array,jagged-arrays,C#,Arrays,Multidimensional Array,Jagged Arrays,是否有一个潜在的1线性,允许我从2D内部数组的某个索引创建一个新的1维数组 以每个内部数组的第一个元素为例: double[][] array2D = new double[10][] // with inner arrays say double[5] double[] array1D = new double[10]; for (int i=0; i<array2D.Length; i++) { array1D[i] = array2D[i][0]; } double[][

是否有一个潜在的1线性,允许我从2D内部数组的某个索引创建一个新的1维数组

以每个内部数组的第一个元素为例:

double[][] array2D = new double[10][] // with inner arrays say double[5]
double[] array1D = new double[10];

for (int i=0; i<array2D.Length; i++)
{
    array1D[i] = array2D[i][0];
}
double[][]array2D=新的double[10][//内部数组表示double[5]
double[]数组1d=新的double[10];

对于(int i=0;i我只使用LINQ。这不会在执行方面“避免循环”,但会在源代码中避免循环:

// 1dArray isn't a valid identifier...
var singleArray = jaggedArray.Select(x => x[0]).ToArray();
请注意,这依赖于它是一个锯齿状数组(数组数组数组)。它不会像您期望的那样用于真正的多维(矩形)数组

或者更有效一点:

var singleArray = Array.ConvertAll(jaggedArray, x => x[0]);

这更有效,因为它知道要开始的输出大小,并直接构建数组——但它比现在使用LINQ(它更普遍地适用于所有序列,而不仅仅是数组)的习惯用法要少一些。

我只使用LINQ。这不会“避免循环”在执行方面,但它将避免源代码中的循环:

// 1dArray isn't a valid identifier...
var singleArray = jaggedArray.Select(x => x[0]).ToArray();
请注意,这依赖于它是一个锯齿状数组(数组数组数组)。它不会像您期望的那样用于真正的多维(矩形)数组

或者更有效一点:

var singleArray = Array.ConvertAll(jaggedArray, x => x[0]);

这更有效,因为它知道要开始的输出大小,并直接构建数组——但它比现在使用LINQ(它更普遍地适用于所有序列,而不仅仅是数组)的习惯性要差一点。

在我看来,您已经有了一个2行程序……呵呵,我想避免循环,所以让我们假设一个1行程序:p
(int i=0;类似于
2dArray.Select(a=>a[0]).ToArray();
?for循环非常好。我认为无需更改它。但是如果您确实愿意,您可以使用Enumerable.Range(0,array2d.Length)。(顺便说一句,2dArray不是有效的变量名)在我看来,你已经有了一个2行程序了……呵呵,我想避免循环,所以让我们假设一个1行程序:p
for(int I=0;类似于
2dArray.Select(a=>a[0]).ToArray();
?这对于循环来说非常好。我不需要更改它。但是如果你真的想使用Enumerable.Range(0,array2d.Length)。(顺便说一句,2darray不是一个有效的变量名)谢谢Jon,我确实在找这样的东西:)谢谢Jon,我确实在找这样的东西:)