本文へスキップ
BecomeCoder

Rubyコース · 第6章 ブロックとイテレータ · レッスン26

each_with_indexとmapの合わせ技

ブラウザで完結

導入

配列を処理するとき、「値」だけでなく「その値が何番目か」も同時に使いたいことがあります。すでに紹介した each_with_index を、他のメソッドと組み合わせて使う場面を見ていきます。

説明

fruits = ["りんご", "バナナ", "ぶどう"]

fruits.each_with_index do |fruit, i|
  puts "#{i + 1}番目: #{fruit}"
end

numbers = [1, 2, 3, 4]
labeled = numbers.each_with_index.map { |n, i| "#{i}:#{n}" }
puts labeled.inspect

each_with_indexeach と同じく、繰り返すだけなら puts などで十分ですが、.map と組み合わせることで「番号付きの新しい配列」を作ることもできます。この例では each_with_index.map { |n, i| ... } のように、each_with_index の結果をそのまま map に渡しています。

やってみよう

i + 1 の部分を i だけにして、0から始まる番号との違いを確認しましょう。labeled の中身も自分なりの形式に変えてみてください。

演習

配列 names = ["A", "B", "C"]each_with_index で回し、0: A1: B2: C のように表示してください。

ヒント1を見る

names.each_with_index do |name, i| puts "#{i}: #{name}" end のように書きます。

ヒント2を見る

ブロック変数|値, 番号| の順番です。

実際に動かしてみよう

下のエディタにRubyを書いて「実行」を押すと、学習用シミュレータが puts / print / p の出力を表示します(本物のRubyではなく、教材の範囲を再現した軽量な自作エンジンです)。配列・ハッシュ・ブロック(each/map/select)・メソッド・クラス・モジュール・例外なども動きます。本文の例を書き換えて動かしてみましょう(gem・Rails・ファイル入出力など一部の機能は対象外です。文字列を伸ばすときは str << も可能ですが、変数に反映されるのは str += です)。

Ruby — ブラウザ内で実行(学習用シミュレータ)

Rubyの教材サブセットを動かす学習用シミュレータを読み込みます(本物のRubyではなく、動きを再現した軽量な自作エンジンです)。
スクロールして表示された時点でも自動で読み込まれます。