配列(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で削除sort、uniq、reverseなど豊富なメソッドがあるselectやrejectで条件に合う要素を抽出できる- マイナスのインデックスで末尾から要素にアクセスできる