2013-10-03 56 views
10

首先,我是.NET開發人員和LOVE LINQ以及C#中的擴展方法。 但是,當我腳本我需要Enumerable extension methodspowershell max/first/aggregate功能

東西相當於任何人都可以給我任何建議/解釋有關如何在這樣的情況下工作,在PowerShell中的最佳實踐。例如,假設我想從陣列獲取最大元素:

$arr = @(2, 1, 3) 
$max = $arr.MAX() #?? what should i do in this case? 

回答

20

使用Measure-Object命令:

C:\PS> 2,1,3 | Measure-Object -Maximum 


Count : 3 
Average : 
Sum  : 
Maximum : 3 
Minimum : 
Property : 

或者只獲取最大:

C:\PS> (2,1,3 | Measure -Max).Maximum 

還有一個最小,平均值和總和可以從上面看到。但是你必須告訴PowerShell使用參數來計算Measure-Object,例如-Sum -Average等

9

Keith正確地提到PowerShell等同於某些LINQ擴展方法。請注意,您可以從PowerShell中調用大多數擴展方法,但您無法像調用成員一樣調用它們。

擴展方法實際上只是靜態方法,在C#中有一些額外的規則允許它們像成員一樣被調用。

PowerShell沒有實現這些規則中的任何一個,但這並不妨礙您將它們作爲靜態方法調用,例如,

[System.Linq.Enumerable]::Average([int[]](1..10)) 
+0

那麼Func的方法呢? 任何( \t此IEnumerable的源, \t Func鍵謂詞 ) –

+0

可能的,但有點痛苦的,因爲型扣並不像強大,因爲它可以是:[System.Linq.Enumerable]: :任何([int []] @(1..10),[System.Func [int,bool]] {$ args [0] -gt 5}) –

+0

那麼,在這種情況下應該怎麼做? –

0

$ arr | foreach {if($ max -lt $ _){$ max = $ _}}; $ max