是一种更清晰的方法来获取数组数组中的顶部值吗?

时间:2015-11-03 22:44:37

标签: .net arrays powershell coding-style

我有一个阵列数组,这些数组的大小完全不同,但所有整数都是如此。我需要做的是找到每个值的最高值,以便稍后与之比较。不是太难,但是当我把它写出来时,乍一看代码几乎看不到。特别是这一行:

$logScaleList[$i][$logScaleList[$i].Length-1] 

由于这个钝,或者只是在处理2d数组时,你会有丑陋的嵌套语句吗?

完整代码:

$logScaleList = [System.Collections.ArrayList]@() 

[void]$logScaleList.Add(@(100,126,158,200,251,316,398,501,631,794,1000,1259,1585,1995,2512,3162,3981,5012,5230))
[void]$logScaleList.Add(@(100,126,158,200,251,316,398,501,631,794,1000,1259,1585,1995,2512,3162,3981,5012,5850))
[void]$logScaleList.Add(@(1000,1259,1585,1995,2512,3162,3981,3162,5012,6310,7390))
[void]$logScaleList.Add(@(1,2,3,4,5,6,8,10,13,16,20,25,32,40,50,63,79,100,126,158,200,251,316,398,501,631,794,1000,1259,1585,1995,2512,3162,3981,5012))
[void]$logScaleList.Add(@(1,2,3,4,5,6,8,10,13,16,20,25,40,50,63,79,100,126,158,200,251,316,398,501,631,794,1000,1259,1585,1995,2512))


for ($i = 0; $i -lt $logScaleList.count; $i++)
{ 
    write-host "Top value is" $logScaleList[$i][$logScaleList[$i].Length-1] 

}

2 个答案:

答案 0 :(得分:0)

您可以使用ForEach-Objectforeach循环来避开第一个索引运算符:

foreach($List in $LogScaleList){
    $List[$List.Length - 1]
}

您可以按索引-1引用最后一项,同时避开Length属性(如果这看起来不那么难看):

foreach($List in $LogScaleList){
    $List[-1]
}

答案 1 :(得分:0)

您可以使用sort cmdlet对数组进行排序,然后选择第一项:

$logScaleList | % { $_ | sort -Descending | select -first 1 }

输出:

5230
5850
7390
5012
2512