将List <double []>转换为double [,] </double []>

时间:2010-06-23 22:05:17

标签: c# multidimensional-array

说我有一个

List<double[]> x = new List<double[]>();
double[] item = new double[] {1.0,2.0,3.0};
x.add(item);
etc...

是否有更快/更清晰的方法将其变为双[,]然后循环它:

double[,] arr = new double[x.Count,3];          
for (row = 0; row < x.Count; row++)
{
    for (col = 0; col < 3; col++)
        arr[row,col] = x[row][col];
}

感谢。

3 个答案:

答案 0 :(得分:3)

不,没有。

多维数组是奇怪的野兽,并未在BCL中广泛接受或使用。

它们也很慢,应该尽可能避免。

答案 1 :(得分:2)

因为我觉得这样,我用LINQ解决了这个问题,然而,它几乎没有任何清洁。事实上,我认为它不太清楚,但它很糟糕:)

// Input
List<double[]> a = new List<double[]>() { 
    new double[]{ 1.0, 2.0, 3.0 },
    new double[]{ 4.0, 5.0, 6.0 },
    new double[]{ 7.0, 8.0, 9.0 }
};

// Output
var b = a.Select((item, index) => new 
            { 
                Items = item.Select((inner, inIndex) => new { Inner = inner, Y = inIndex }),
                X = index 
            })
            .SelectMany(item => item.Items, (i, inner) => new { Value = inner.Inner, X = i.X, Y = inner.Y })
            .Aggregate(new double[a.Count, a.Max(aa => aa.Length)], (acc, item) => { acc[item.X, item.Y] = item.Value; return acc; })

注意:这也适用于任意大小的内部double[]数组,但会有空白点。

是的,有另一种方式,但它不是更好方式:)

答案 2 :(得分:0)

总有var_export功能吗?