2013-10-03 69 views
10

まず、私は.NETの開発者であり、C#のLOVE LINQと拡張メソッドです。 しかし、私はスクリプトを書くときに何かを必要とします。Enumerable extension methodspowershell max/first/aggregate関数

Powershellのこのようなシナリオでどのように作業するかについてのアドバイスや説明がありますか?例えば、私は配列から最大の要素をしたいと仮定します。最低でもあります

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

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

をそれとも最大を取得します、上記のように利用可能な平均値と合計値が表示されます。しかし、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

このような場合はどうすればよいですか? –

0

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