1

我有一个数组,我想获取存储在数组中的每个维度的长度。即我想要如下内容:

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

int[] dimLengths = myArray.SomeLinqStatement...

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

4

2 回答 2

1

为什么需要 LINQ 来获取 `Array's 维度的长度?

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 方法

这是您的“性感” 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();
于 2012-04-10T16:28:39.987 回答
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();
于 2012-04-10T16:35:49.717 回答