说我有一个
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];
}
感谢。
答案 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
功能吗?