maeshimaの日記

メモ書きです

Array その3

Array#count

引数を渡さなかった場合は要素の個数を返す。引数を渡した場合は、引数と等しい要素の個数を返す

[1,2,2,3,3,3].count(2) #=> 2 

またはブロックを評価した結果が真になる要素の個数を返す。

[1,2,2,3,3,3].count do |obj| obj > 2; end #=> 3 

どうもRails脳だとcountはActiveRecordのメソッドの印象があっていけない。Enumerableにも同じメソッドがあるみたい。

misc

本では「引数を渡さなかった場合はEnumeratorを返す」って書いてあったけど違った。途中で挙動が変わったのかな?

Array#combination

要素から引数で渡したサイズの組み合わせを全て生成する。ブロックを与えると、各組み合わせをブロックに渡す。ブロックを指定しないと、enumeratorオブジェクトを返す。

a = [1,2,3,4]
a.combination(3).to_a # => [[1, 2, 3], [1, 2, 4], [1, 3, 4], [2, 3, 4]] 
# ブロックに結果を渡せる
a.combination(3) do |ary| p ary end

Array#permutation

combinationの順列版

a.permutation(3).to_a # => [[1, 2, 3], [1, 2, 4], [1, 3, 2], [1, 3, 4], [1, 4, 2], [1, 4, 3], [2, 1, 3], [2, 1, 4], [2, 3, 1], [2, 3, 4], [2, 4, 1], [2, 4, 3], [3, 1, 2], [3, 1, 4], [3, 2, 1], [3, 2, 4], [3, 4, 1], [3, 4, 2], [4, 1, 2], [4, 1, 3], [4, 2, 1], [4, 2, 3], [4, 3, 1], [4, 3, 2]] 
# ブロックに結果を渡せる
a.permutation(3) do |ary| p ary end

参考

プログラミングRuby 第2版 ライブラリ編
Dave Thomas Chad Fowler Andy Hunt
オーム社
売り上げランキング: 228524