{category}

Ruby - イテレーションとEnumerator

each_with_object

イーチ・ウィズ・オブジェクト(制御構造と繰り返し

意味 要素処理と結果蓄積を同時に


each_with_objectとは?

each_with_objectは、コレクションの各要素を処理しながら、同時に結果をオブジェクトに蓄積するメソッドです。初期オブジェクトを渡し、それを更新しながら処理を進めます。

each_with_objectの具体的な使い方

配列から文字数をカウントするハッシュを作成

words = ['apple', 'banana', 'cherry']

result = words.each_with_object({}) do |word, count_hash|
  count_hash[word] = word.length
end

puts result

👇出力結果

{"apple"=>5, "banana"=>6, "cherry"=>6}

この例では、配列の各要素(単語)をキーとし、その文字数を値とするハッシュを作成します。each_with_objectメソッドを使用することで、イテレーションと結果の蓄積を同時に行っています。

数値の配列から偶数と奇数を分類

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

classified = numbers.each_with_object({ even: [], odd: [] }) do |num, result|
  if num.even?
    result[:even] << num
  else
    result[:odd] << num
  end
end

puts "偶数: #{classified[:even]}"
puts "奇数: #{classified[:odd]}"

👇出力結果

偶数: [2, 4, 6, 8, 10]
奇数: [1, 3, 5, 7, 9]

この例では、数値の配列を偶数と奇数に分類しています。each_with_objectメソッドを使用して、一度のイテレーションで効率的に分類を行っています。

each_with_objectに関するよくある質問

Q. each_with_objectの利点は?
A. each_with_objectの主な利点は、イテレーションと結果の蓄積を同時に行えることです。初期オブジェクトを渡すため、別途変数を用意する必要がなく、コードがよりシンプルになります。
Q. 引数の順序は重要ですか?
A. はい、重要です。ブロック引数の順序は常に「要素、オブジェクト」となります。この順序を間違えると、期待通りの結果が得られません。
Q. 初期オブジェクトは必須ですか?
A. はい、each_with_objectメソッドを使用する際は、必ず初期オブジェクトを指定する必要があります。これは空のハッシュや配列、あるいは任意のオブジェクトになります。

each_with_objectが学べる書籍の紹介

「プログラミング単語帳」を使って、プログラミングの単語を英単語のように学習してみませんか?
プログラミング単語帳には、Rubyのeach_with_objectやthen、cycle、none?、などのような実務でよく使われる単語が数百以上収録されています。
この書籍には、プログラミングの単語の意味や読み方、単語の使い方がわかる例文などが掲載されており、いつでもどこでもプログラミングの学習ができます。

よく使われる単語にだけ絞って学習することができるので、効率的にプログラミングが学習できます。

1日5分の暗記でプログラミンが身に付く!プログラミング単語帳 公式ストアで発売中!

HTML編、CSS編、JavaScript編、PHP編、Ruby編、その他単語編の6シリーズ分が公式ストアにて販売中です。気になった方はぜひ購入してみてください。


Rubyを学べる「プログラミング単語帳」アプリ

プログラミング単語帳がアプリになりました!Rubyはもちろん、10種類のプログラミング言語の中から、よく使われる単語をスマホで学習できます。

収録単語は2,000単語以上!
現在は、HTML、CSS、JavaScirpt、PHP、Laravel、Ruby、Python、MySQL、Linux、など10カテゴリーの単語帳が1つのアプリに収録されています。

いつでも、どこでも、隙間時間を有効活用して、プログラミングを効率的に学べるので、ぜひダウンロードしてみてください。

2024年7月アップデート情報:「Laravel」カテゴリーが追加されましました!

2024年8月アップデート情報:「MySQL」「Linux」カテゴリーが追加されましました!


関連するそのほかの単語

then

条件式の後の処理

種類: 条件分岐

cycle

要素を繰り返し処理

種類: イテレーションとEnumerator

none?

条件を満たす要素が1つもないか確認

種類: イテレーションとEnumerator

intern

文字列をシンボルに変換

種類: シンボル操作

compact

nilを除去する配列メソッド

種類: 配列操作