連想配列(マップ/ハッシュ/ディクショナリ)から特定の条件にマッチする要素のみを取り出すには (filter / select / partition / delete_if) 2015/03/03
連想配列(マップ/ハッシュ/ディクショナリ)から特定の条件にマッチする要素のみを取り出す方法。
Scala 2014/12/19
Signature:
例
val map = Map("a" -> 1, "b" -> 2, "c" -> 3);
val filtered = map.filter { case (key, value) =>
value % 2 != 0;
}
println(filtered);
// => Map(a -> 1, c -> 3)
PHP 2015/03/24
array_filter
関数でできる。
array_filter
関数は、要素のキーではなく値だけが述語関数に渡されるので、要素を抽出するかどうかの判定にキーを使うことはできない。
要素のキーはそのまま保存される。
$arr = array('a' => 1, 'b' => 2, 'c' => 3);
var_export($arr);
// 出力結果
// array (
// 'a' => 1,
// 'b' => 2,
// 'c' => 3,
// )
$filtered = array_filter($arr, function($elem) {
return $elem % 2 != 0;
});
var_export($filtered);
// 出力結果
// array (
// 'a' => 1,
// 'c' => 3,
// )
PHPは普通の配列と連想配列が同じものなので、
array_filter
関数は配列でも使える。
array_filter
関数 | PHP Manual
http://php.net/manual/ja/function.array-filter.php
Ruby 2014/02/18
Rubyでは配列と同様のメソッド
Hash#select
, Hash#partition
, Hash#delete_if
などを利用できる。
例
hash = {'a' => 1, 'b' => 2, 'c' => 3}
p hash.select { |key, value| value % 2 != 0 }
# => {"a"=>1, "c"=>3}
p hash.partition { |key, value| value % 2 != 0 }
# => [[["a", 1], ["c", 3]], [["b", 2]]]
p hash.delete_if { |key, value| value % 2 != 0 }
# => {"b"=>2}
Hash#delete_if
は破壊的メソッド。
Hash#select
はRuby 1.8以前は配列を返していた。