Enumerable
公式サイト:
module Enumerable | Ruby リファレンスマニュアル [公式]
使い方
参考:
Enumerator
参考:
class Enumerator | Ruby リファレンスマニュアル [公式]
count
参考:
Enumerable#count | Ruby リファレンスマニュアル [公式]
first
参考:
Enumerable#first | Ruby リファレンスマニュアル [公式]
map / collect
参考:
Enumerable#collect | Ruby リファレンスマニュアル [公式]
reduce / inject
参考:
inject / reduce メソッドを使いこなす | Hack Your Design!
reduce で with_index する方法 – Qiita
Enumerable#inject | Ruby リファレンスマニュアル [公式]
inject with index and brackets – Stack Overflow
select
参考:
Enumerable#filter | Ruby リファレンスマニュアル [公式]
reject
参考:
Enumerable#reject | Ruby リファレンスマニュアル [公式]
flat_map
map
した結果の配列を concat
する。
参考:
Enumerable#flat_map で多重配列が返ってきそうな処理もシンプルにできる | Bye Bye Moore
map して flatten したら flat_map になる、を ruby でやってみた – Qiita
ruby の flat_map って何? | rochefort’s blog
Enumerable#collect_concat | Ruby リファレンスマニュアル [公式]
min / max
参考:
Enumerable#min | Ruby リファレンスマニュアル [公式]
Enumerable#max | Ruby リファレンスマニュアル [公式]
minmax
要素の中から最小値と最大値を返す。各要素を <=>
演算子で比較して一番小さい要素 (一番先頭にくる要素) と一番大きい要素 (一番後ろにくる要素) を配列にして返す。
<=>
で比較できない要素が混じっていると例外 ArgumentError
が発生する。<=>
を実装していない要素があると例外 NoMethodError
が発生する。
numbers = [47, 57, 17, 20, 47, 41, 5, 16, 63, 34] numbers.minmax # => [5, 63]
参考:
Enumerable#minmax | Ruby リファレンスマニュアル [公式]
min_by / max_by
参考:
Enumerable#min_by | Ruby リファレンスマニュアル [公式]
Enumerable#max_by | Ruby リファレンスマニュアル [公式]
find
参考:
Enumerable#detect | Ruby リファレンスマニュアル [公式]
sum
要素の合計を計算する。ブロックを与えた場合はブロックの値を合計する。
参考:
Enumerable#sum | Ruby リファレンスマニュアル [公式]
each_with_index
各要素について添え字と共に繰り返し処理を行う。
%w[a b c].each_with_index do |c, i| puts "#{i} #{c}" end
指定した添え字から開始する場合は with_index
を使う。
%w[a b c].each.with_index(1) do |c, i| puts "#{i} #{c}" end
参考:
Enumerable#each_with_index が便利すぎる | 永遠に未完成
Enumerable#each_with_index | Ruby リファレンスマニュアル [公式]
Enumerator#with_index | Ruby リファレンスマニュアル [公式]
Array#each | Ruby リファレンスマニュアル [公式]
Array#each_index | Ruby リファレンスマニュアル [公式]
each_with_object
参考:
inject と each_with_object って何が違うのさ? – Qiita
Ruby の each_with_object と inject について | 茶漬けの技術メモ
Ruby でハッシュを別の形式のハッシュに変換する方法 | give IT a try
Enumerable#each_with_object | Ruby リファレンスマニュアル [公式]
reverse_each
参考:
配列をインデックス付きで逆順に each する – Qiita
Enumerable#reverse_each | Ruby リファレンスマニュアル [公式]
reverse_each_with_index – Stack Overflow
group_by
参考:
Enumerable#group_by | Ruby リファレンスマニュアル [公式]
Object#itself | Ruby リファレンスマニュアル [公式]
最近思いついた Ruby の Object.itself の使用方法 – Qiita
Custom Ruby Method Enumerable#count_by (Use for Quick Statistics) | makandra dev
Group by identity in Ruby – Stack Overflow
uniq
Array
では破壊的操作 uniq!
が使える。通常の uniq
は重複を取り除いた別のオブジェクトを返す。
参考:
Enumerable#uniq | Ruby リファレンスマニュアル [公式]
Array#uniq | Ruby リファレンスマニュアル [公式]
drop
参考:
Enumerable#drop | Ruby リファレンスマニュアル [公式]
某「ruby で cdr っぽい事したい? drop 使えば良いんじゃないですか? (鼻ホジ」ぼく「……あっ」| Bye Bye Moore
partition
参考:
Enumerable#partition | Ruby リファレンスマニュアル [公式]
any? / all?
参考:
Enumerable#any? | Ruby リファレンスマニュアル [公式]
Enumerable#all? | Ruby リファレンスマニュアル [公式]
Enumerator を作成する
to_enum
enum_for
Enumerator.new
参考:
ブロックを与えない場合に Enumerator を返すメソッドを作る – Qiita
Object#enum_for | Ruby リファレンスマニュアル [公式]
Enumerator.new | Ruby リファレンスマニュアル [公式]
Differences between [1,2,3].to_enum and [1,2,3].enum_for in Ruby – Stack Overflow
join したい
reduce
に +
演算子を渡す。
["Hello", "World"].reduce(&:+)
Code language: Ruby (ruby)
または、to_a
の結果を join
する。
["Hello", "World"].to_a.join("_")
Code language: Ruby (ruby)
参考:
Enumerable#entries | Ruby リファレンスマニュアル [公式]
Array#join | Ruby リファレンスマニュアル [公式]
Join a ruby enumerator into a string – Stack Overflow
join enumerable to produce string – Stack Overflow