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 が必要なのはなぜですか?

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 に答える