基礎

Rubyの配列入門|作成・追加・削除・検索の基本操作を徹底解説

配列(Array)は複数のデータを順番に格納できるデータ構造です。同じ種類のデータをまとめて管理したり、順番にデータを処理したりする場面で使います。Rubyの配列は動的にサイズが変わり、異なる型のデータも混在させることができます。

基本的な使い方

配列の作成

配列は角括弧[]で作成し、要素をカンマで区切って記述します。

Ruby
# 配列の作成
fruits = ['りんご', 'バナナ', 'みかん']
numbers = [1, 2, 3, 4, 5]
mixed = ['文字列', 100, true, nil]

puts fruits.inspect
puts numbers.inspect
puts mixed.inspect
puts "要素数: #{fruits.length}"
実行結果
["りんご", "バナナ", "みかん"]
[1, 2, 3, 4, 5]
["文字列", 100, true, nil]
要素数: 3

要素へのアクセス

配列の各要素にはインデックス(0から始まる番号)でアクセスします。

Ruby
fruits = ['りんご', 'バナナ', 'みかん', 'ぶどう']

puts fruits[0]    # 最初の要素
puts fruits[2]    # 3番目の要素
puts fruits[-1]   # 最後の要素
puts fruits[-2]   # 最後から2番目
puts fruits.first # 最初の要素
puts fruits.last  # 最後の要素
実行結果
りんご
みかん
ぶどう
みかん
りんご
ぶどう

インデックスは0から始まるため、最初の要素は[0]でアクセスします。マイナスのインデックスは末尾からの位置を表し、[-1]が最後の要素です。

要素の追加と削除

Ruby
fruits = ['りんご', 'バナナ']

# 末尾に追加
fruits.push('みかん')
fruits << 'ぶどう'        # pushと同じ
puts "追加後: #{fruits.inspect}"

# 先頭に追加
fruits.unshift('メロン')
puts "先頭追加: #{fruits.inspect}"

# 末尾から削除
removed = fruits.pop
puts "末尾削除: #{removed} → #{fruits.inspect}"

# 先頭から削除
removed = fruits.shift
puts "先頭削除: #{removed} → #{fruits.inspect}"

# 特定の値を削除
fruits.delete('バナナ')
puts "バナナ削除: #{fruits.inspect}"
実行結果
追加後: ["りんご", "バナナ", "みかん", "ぶどう"]
先頭追加: ["メロン", "りんご", "バナナ", "みかん", "ぶどう"]
末尾削除: ぶどう → ["メロン", "りんご", "バナナ", "みかん"]
先頭削除: メロン → ["りんご", "バナナ", "みかん"]
バナナ削除: ["りんご", "みかん"]

便利なメソッド

Ruby
numbers = [3, 1, 4, 1, 5, 9, 2, 6]

puts "要素数: #{numbers.length}"
puts "合計: #{numbers.sum}"
puts "最大値: #{numbers.max}"
puts "最小値: #{numbers.min}"
puts "含む?: #{numbers.include?(5)}"
puts "ソート: #{numbers.sort.inspect}"
puts "重複除去: #{numbers.uniq.inspect}"
puts "逆順: #{numbers.reverse.inspect}"
実行結果
要素数: 8
合計: 31
最大値: 9
最小値: 1
含む?: true
ソート: [1, 1, 2, 3, 4, 5, 6, 9]
重複除去: [3, 1, 4, 5, 9, 2, 6]
逆順: [6, 2, 9, 5, 1, 4, 1, 3]

実践的な使い方

Ruby
# 成績管理
scores = [78, 92, 65, 88, 73, 95, 80]

average = scores.sum.to_f / scores.length
passed = scores.select { |s| s >= 70 }
failed = scores.reject { |s| s >= 70 }

puts "成績一覧: #{scores.inspect}"
puts "平均点: #{average.round(1)}"
puts "合格者(70点以上): #{passed.length}人 #{passed.inspect}"
puts "不合格者: #{failed.length}人 #{failed.inspect}"
puts "最高点: #{scores.max}"
puts "最低点: #{scores.min}"
実行結果
成績一覧: [78, 92, 65, 88, 73, 95, 80]
平均点: 81.6
合格者(70点以上): 6人 [78, 92, 88, 73, 95, 80]
不合格者: 1人 [65]
最高点: 95
最低点: 65
配列の生成方法

Array.new(5, 0)で要素が5つで全て0の配列を作れます。また、(1..10).to_aで1から10までの配列を生成できます。%w[りんご バナナ みかん]は文字列の配列を簡潔に作る記法です。

インデックスの範囲外アクセス

存在しないインデックスにアクセスするとエラーではなくnilが返ります。これはバグの発見を遅らせる原因になるため、fetchメソッドを使うとインデックスが範囲外の場合にエラーを発生させることができます。

まとめ

  • 配列は[]で作成し、インデックス0から要素にアクセスする
  • push/<<で追加、pop/shiftで削除
  • sortuniqreverseなど豊富なメソッドがある
  • selectrejectで条件に合う要素を抽出できる
  • マイナスのインデックスで末尾から要素にアクセスできる