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版 ライブラリ編
posted with amazlet at 11.01.15