2012-04-10 103 views
1

我有一個數組,我想獲得存儲在數組中的每個維的長度。即我想類似以下內容:使用LINQ來獲得數組的長度的長度

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

int[] dimLengths = myArray.SomeLinqStatement... 

我可以與一些for循環(一個或多個),但我希望會有一個簡單的LINQ語句做到這一點。因此,例如,如果myArray是2x3x4的3D數組,我希望dimLengths爲{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

出於好奇,是什麼讓你「確定」非linq方式更好? – KrisTrip 2012-04-10 16:46:27

+1

經驗,加上對LINQ工作方式的理解。 LINQ版本與其他版本做了相同的事情,再加上兩個額外的操作:它需要生成一系列要處理的整數,並且它需要將一個IEnumerable轉換爲一個數組。有關該問題的知識的代碼幾乎總是比沒有這些知識的代碼快。 – 2012-04-10 16:52:17

+1

@KendallFrey:但是這種差異可以忽略不計(當然在這種情況下)。那麼可讀性應該始終是首選。 – 2012-04-10 16:54:00

1

爲什麼你需要LINQ來獲得`Array的維數的長度?

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 2012-04-10 16:30:27

+0

@KrisTrip:測試我的另一種方法。 – 2012-04-10 16:38:26