Enumerableその1
メモ
Enumerable#cycle
object.to_a.cycle と同じ
Enumerable#drop
オブジェクトの最初の n 個を捨てた配列を返す。非破壊的。Enumerable#firstと対をなすメソッド
ary = [1, 2, 3] ary.drop(2) #=> [3] ary #=> [1, 2, 3]
Enumerable#drop_while
ブロック内で最初に偽となった要素よりも前の要素を捨てた配列を返す
ary = [1,2,3,4,5,6,7,8,9,10] ary.drop_while {|item| item < 5} #=> [5, 6, 7, 8, 9, 10]
Enumerable#each_cons
引数の要素ずつ、1要素ずつずらして取り出した各部分配列をブロックに渡す。
(1..4).each_cons(2) {|array| p array} [1, 2] [2, 3] [3, 4]
Enumerable#each_with_object
injectの変化系みたいなメソッド。戻り値が限定(injectだと3行目にmemoって書いとかないと動かない)されてるおかげでinjectよりも短く書ける場合がある。破壊的に更新していかないと意図通り動かないらしいので、単純にinjectの省略形だと思ってると痛い目を見そう(hoge += "fuga"とかだと非破壊的)。Ruby1.9とActiveSupportで使える。
hash = %w(cat dog wombat).each_with_object({}) do |item, memo| memo[item] = item.upcase.reverse end hash # => {"cat"=>"TAC", "dog"=>"GOD", "wombat"=>"TABMOW"} [ 1, 2, 3].each_with_object(0) do |i, j| j += i end # => 0
Enumerable#entries
to_aの別名らしいけど使う人いるのかな
Enumerable#find_index
指定したブロックが真を返した最初の要素のインデックスを返す。「インデックスを返す」って配列以外のオブジェクト(例えばハッシュ)だとどうなるんだろうと思ったので試した。
{:hoge => :fuga}.to_a #=> [[:hoge, :fuga]] {:hoge => :fuga}.find_index{ |a| a == [:hoge,:fuga]}
to_aしてから比較してるみたい
Enumerable#first
引数を省略すると、最初の要素またはnilを返す。引数を指定すると、最初の n 個の要素を返す。
%w(a b c).first #=> "a" %w(a b c).first(2) #=> ["a", "b"]