2015-11-03 39 views
1

我有一個數組大小完全不同的數組,但是都是整數。我需要做的是找到每個人的最高價值與以後的某個東西進行比較。不太難,但是當我寫出來的時候,代碼感覺乍一看幾乎不可讀。特別是這一行:是一種更簡潔的方式來獲取數組數組中的最高值嗎?

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

由於這種鈍,或只是與二維數組打交道時,你將有醜陋的嵌套聲明的事實?

全部代碼在這裏:

$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] 

} 
+0

頂部爲最高值?或者在數組元素0? –

+0

Um,'$ LogScaleList | ForEach {$ _ |選擇-Last 1}或$ LogScaleList | ForEach {$ _ [ - 1]}',其中任何一個都會得到嵌套數組的最後一個值。如果數組不是這樣,你可以通過管道輸入「Sort」,然後輸入「Select -Last 1」。 – TheMadTechnician

回答

0

可以使用ForEach-Objectforeach循環,以避免第一索引運算符:

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

您可以通過索引-1引用的最後一個項目,避免了Length財產(如果這看起來不那麼難看):

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

可以使用sort cmdlet來對數組進行排序,選擇第一項:

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

輸出:

5230 
5850 
7390 
5012 
2512 
相關問題