2

我们可以使用 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 但它只填充第一级。如何去做。谢谢

&顺便说一句,这不是家庭作业!!

4

1 回答 1

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;
}
于 2012-04-10T12:13:37.953 回答