2011年4月20日水曜日

◆配列をフィルターする

PS>$a -eq $a
True

この式は必ずTrueが返ってくるだろうか。
実は、Trueが返ってこない$aの値がある。
さて、何でしょう・・・。

 

本題に戻って配列からある特定の値を抽出して結果をカウントしてみる。

原始的にやるとこんな感じ。

PS>$arr = 1,2,1,3,4,2,1
PS>$arr | %{$c=0}{if($_ -eq 1){$c++}}{$c}
3
PS>

普通は抽出なのでWhere-Objectを使うのかな。

PS>$arr = 1,2,1,3,4,2,1
PS>($arr | ?{$_ -eq 1} | Measure).count
3
PS>

意外とすっきりしない・・・。

match演算子を使うともう少しすっきりする。

PS>$arr = 1,2,1,3,4,2,1
PS>($arr -match 1).Count
3
PS>

だいぶすっきりした。

もう少し短く書ける。(他の方法もあるかもしれませんが)

PS>$arr = 1,2,1,3,4,2,1
PS>($arr -eq 1).Count
3
PS>

配列に対する比較演算子はその条件を満たす要素を返すようにオーバーロードされているようだ。
なので、この様に簡単に抽出が可能になっている。

PS>$arr = 1,2,1,3,4,2,1
PS>$arr -ge 2
2
3
4
2
PS>

なので、一番最初の話に戻って$aに配列を入れるとTrueが返ってこなくなる。

PS>$arr = 1,2,1,3,4,2,1
PS>$a = $arr
PS>$a -eq $a
PS>

0 件のコメント:

コメントを投稿