2013-10-03 57 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