2013-10-03 6 views
10

Прежде всего, разработчик i`m .NET и LOVE LINQ и методы расширения на C#. Но когда я написала сценарий, мне нужно что-то эквивалентное Enumerable extension methodspowershell max/first/aggregate functions

Может ли кто-нибудь дать мне какое-либо предложение/пояснить лучшую практику о том, как работать в таких сценариях в 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]: : Any ([int []] @ (1..10), [System.Func [int, bool]] {$ args [0] -gt 5}) –

+0

Итак, что я должен делать в таких случаях? –