我有一个数组,我希望将每个维度的长度存储在一个数组中。即我想要以下内容:
Array myArray = //...Blah blah myArray is defined somewhere in code
int[] dimLengths = myArray.SomeLinqStatement...
我可以用一些for循环来做这个,但我希望有一个简单的linq语句。例如,如果myArray是2x3x4的3D数组,我希望dimLengths为{2,3,4}。
答案 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
这是你的“性感”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();