2012-04-10 25 views
1

配列に格納されている各次元の長さを取得したい配列があります。私。私はループのためのいくつかの(S)でこれを行うことができますLINQを使用して配列の長さを取得

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

int[] dimLengths = myArray.SomeLinqStatement... 

が、私は、単純なLINQ文のがあるだろう期待していた:私は、次のような何かをしたいと思います。たとえば、myArrayが2x3x4の3D配列である場合、dimLengthが{2,3,4}になります。

答えて

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(); 
+0

好奇心のために、どうしたらいいのですか? – KrisTrip

+1

体験、およびLINQの仕組みの理解LINQのバージョンは、他のバージョンと同じことに加えて、2つの追加の操作を行います。作業する整数のシーケンスを生成する必要があり、 'IEnumerable'を配列に変換する必要があります。問題に関する知識を持つコードは、ほとんど知られていないコードよりも速いです。 –

+1

@KendallFrey:しかし、その差はごくわずかです(この場合は確かです)。それでは、読みやすさを常に優先するべきです。 –

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

私はすべての次元の長さの配列をしたいので。 forループとGetLengthメソッドを使用できることはわかっています。私はちょうどlinqのセクシーさとすべての行をしたい:) – KrisTrip

+0

@KrisTrip:私の他のアプローチをテストします。 –

関連する問題