我们可以使用linq将double [] [] []数组初始化为double [1] [2] [3](这不是正确的语法)。
使用for循环的方法是
double[][][] myarr = new double[1][][];
for(int i=0; i<1; i++)
{
myarr[i] = new double[2][];
for(int j=0; j<2; j++)
{
myarr[i][j] = new double[3];
}
}
但我想要一个更干净的代码。我尝试了Select但它只填充了第一级。怎么去吧。感谢
&安培;顺便说一下这不是作业!!
答案 0 :(得分:4)
double[][][] threeDimensionArray =
Enumerable.Range(0, 1)
.Select(h1 => Enumerable.Range(0, 2)
.Select(h2 => new double[3])
.ToArray())
.ToArray();
但这需要进行内存复制的多个ToArray()
调用(请参阅下面的实现),因此对于大量项目而言,它不会有效,因此这种“优雅”的解决方案不是免费的。顺便说一句,我更喜欢for
循环解决方案。
Enumerable.ToArray()
实施:(信用到ILSpy)
// System.Linq.Enumerable
public static TSource[] ToArray<TSource>(this IEnumerable<TSource> source)
{
if (source == null)
{
throw Error.ArgumentNull("source");
}
// sll: see implementation of Buffer.ToArray() below
return new Buffer<TSource>(source).ToArray();
}
// System.Linq.Buffer<TElement>
internal TElement[] ToArray()
{
if (this.count == 0)
{
return new TElement[0];
}
if (this.items.Length == this.count)
{
return this.items;
}
TElement[] array = new TElement[this.count];
Array.Copy(this.items, 0, array, 0, this.count);
return array;
}