使用LINQ获取Array的维度长度

时间:2012-04-10 16:22:40

标签: arrays linq multidimensional-array dimensions

我有一个数组,我希望将每个维度的长度存储在一个数组中。即我想要以下内容:

Array myArray = //...Blah blah myArray is defined somewhere in code

int[] dimLengths = myArray.SomeLinqStatement...

我可以用一些for循环来做这个,但我希望有一个简单的linq语句。例如,如果myArray是2x3x4的3D数组,我希望dimLengths为{2,3,4}。

2 个答案:

答案 0 :(得分:1)

为什么需要LINQ来获取“数组维度”的长度?

myArray.GetLength(0); //returns the length of the first dimension
myArray.GetLength(1); //returns the length of the second dimension
myArray.GetLength(2); //returns the length of the third dimension

Array.GetLength Method

这是你的“性感”LINQ方法:

int[, ,] array3D = new int[,,] { { { 1, 2, 3 }, { 4, 5, 6 } }, 
                             { { 7, 8, 9 }, { 10, 11, 12 } } };
var result = Enumerable.Range(0, array3D.Rank)
      .Select(i => array3D.GetLength(i))
      .ToArray();

答案 1 :(得分:1)

您不需要LINQ。这是一个简单的解决方案:

int[] GetDimensions(Array array)
{
    int[] dimensions = new int[array.Rank];
    for (int i = 0; i < array.Rank; i++)
    {
        dimensions[i] = array.GetLength(i);
    }
    return dimensions;
}

如果你必须使用LINQ,你可以试试这个,虽然我相信另一种方式更好:

int[] dimensions = Enumerable.Range(0, array.Rank)
                             .Select(i => array.GetLength(i))
                             .ToArray();