Rubyの配列・ハッシュとは?作り方・要素の操作を解説

PR Ruby

Rubyの配列・ハッシュとは?作り方・要素の操作を解説

💡 この記事でわかること

  • 配列とハッシュの違い、使い分け
  • 配列の作り方と、要素の取り出し・書き換え(後ろから数える [-1] も)
  • push<<popdelete など、要素を追加・削除する方法
  • ハッシュのキー(シンボル)と値の扱い方、存在しないキーと nil
  • each で配列・ハッシュを1つずつ処理する方法

1. 配列とハッシュとは?

配列もハッシュも、
👉 複数の値をまとめて1つの変数で扱うためのしくみです。Rubyには代表的なものが2つあります。

  • 配列(Array):値を順番に並べる。0 から始まる番号(インデックス)で管理する
  • ハッシュ(Hash):値を「キー(名前)」と「値」のペアで管理する。他の言語の連想配列・辞書にあたる
# 配列:3人の名前を順番に並べる
names = ["太郎", "花子", "次郎"]

# ハッシュ:1人の情報を項目名つきで持つ
user = { name: "太郎", age: 20 }

💡 配列は [ ]、ハッシュは { } で書きます。PHPのように両方を1つの型でまとめて扱うのではなく、Rubyでは配列(Array)とハッシュ(Hash)は別のものとして区別されます。データ型をまだ確認していない場合は、先に読んでおくとスムーズです。

👉 Rubyのデータ型(文字列・数値・nil)についての記事はこちら


2. 配列の作り方と取り出し方

要素は [ ] の中に値をカンマ区切りで並べて作ります。取り出すときは 0から始まる番号(インデックス)[ ] で指定します。

fruits = ["りんご", "みかん", "ぶどう"]

puts fruits[0]    # りんご(1番目)
puts fruits[2]    # ぶどう(3番目)
puts fruits[-1]   # ぶどう(うしろから1番目)

fruits[1] = "もも"  # 2番目を書き換える
puts fruits[1]      # もも

👉 Rubyでは fruits[-1] のように、マイナスの番号で「うしろから数える」書き方ができます(PHPではできませんが、Pythonと同じ感覚で使えます)。存在しない番号を指定してもエラーにはならず、nil が返ります。

連続した範囲を切り出したいときは、[開始番号, 個数] か範囲オブジェクトを使います。

nums = [10, 20, 30, 40, 50]

p nums[1, 2]    # [20, 30](1番目から2個)
p nums[1..3]    # [20, 30, 40](1〜3番目)
p nums.first    # 10
p nums.last     # 50

3. 配列の要素の追加・削除

tasks = ["買い物", "掃除"]

tasks << "洗濯"          # 末尾に追加 → ["買い物", "掃除", "洗濯"]
tasks.push("料理")       # これも末尾に追加

last = tasks.pop        # 末尾を取り出して削除(last に "料理")
first = tasks.shift     # 先頭を取り出して削除(first に "買い物")
tasks.unshift("起床")    # 先頭に追加

tasks.delete("掃除")     # 値を指定して削除
tasks.delete_at(0)      # 番号を指定して削除

puts tasks.length              # 要素数
puts tasks.include?("洗濯")     # 含まれているか(true / false)
  • 配列 << 値:末尾に1つ追加する(いちばんよく使う書き方)
  • push / pop:末尾に追加 / 末尾を取り出して削除
  • unshift / shift:先頭に追加 / 先頭を取り出して削除
  • delete(値) / delete_at(番号):値・番号を指定して削除
  • length(size でも可):要素数。include?(値):値が含まれるか

💡 末尾に「?」が付くメソッド(include? など)は、truefalse を返すという目印です。Rubyの慣習で、名前を見ただけで「これは真偽を返すメソッドだ」と分かるようになっています。


4. each で1つずつ処理する

fruits = ["りんご", "みかん", "ぶどう"]

fruits.each do |fruit|
  puts fruit
end

# 実行結果: りんご みかん ぶどう

👉 配列と each はセットでよく使います。中身をまとめて確認したいときは p 配列(p fruits)を使うと、["りんご", "みかん", "ぶどう"] のように配列の形のまま表示されます。

👉 Rubyのif文・for文・while文(eachの基本)についての記事はこちら


5. ハッシュの作り方と取り出し方

ハッシュは キー => 値 のペアをカンマ区切りで { } に並べて作ります。値を取り出すときは、番号ではなくキー[ ] で指定します。

user = { :name => "太郎", :age => 20 }

puts user[:name]   # 太郎
puts user[:age]    # 20

👉 キーの先頭に付いている :name は「シンボル」といって、Rubyでハッシュのキーによく使われる値です。文字列 "name" と似ていますが、「名札」のように名前そのものを表すための軽量な値で、ハッシュのキーに向いています。

キーがシンボルのときは、{ name: "太郎", age: 20 } という省略した書き方ができます。こちらのほうが一般的です。

# この2つは同じ意味
user = { :name => "太郎", :age => 20 }
user = { name: "太郎", age: 20 }

# 書き方が name: でも、取り出すときは [:name]
puts user[:name]   # 太郎

💡 name: と書いても、取り出すときは user[:name] のようにコロンを前に付けたシンボルで指定します。ここは書き方と取り出し方でコロンの位置が変わるため、最初は戸惑いやすいポイントです。

存在しないキーを指定した場合は、エラーにならず nil が返ります(PHPのように警告は出ません)。「なかったときの値」を決めたいときは fetch を使います。

user = { name: "太郎" }

p user[:email]                 # nil
puts user.fetch(:email, "未登録") # 未登録(第2引数がないときはエラーになる)

6. ハッシュの追加・変更・削除

user = { name: "太郎", age: 20 }

user[:age] = 21                 # 既存のキー → 値を変更
user[:email] = "taro@example.com" # 新しいキー → 追加

user.delete(:age)   # キーごと削除

puts user.key?(:name)   # true(キーがあるか)
p user.keys             # [:name, :email]
p user.values           # ["太郎", "taro@example.com"]

👉 ハッシュ[キー] = 値 は、キーが既にあれば「変更」、なければ「追加」になります。キーの有無は key?(キー)、キーや値の一覧は keys / values で取り出せます。


7. each でハッシュを処理する

scores = { 国語: 80, 数学: 65, 英語: 90 }

scores.each do |subject, score|
  puts "#{subject}: #{score}点"
end

# 国語: 80点
# 数学: 65点
# 英語: 90点

👉 ハッシュを each で回すときは、|キー, 値| と2つの変数を受け取ります。配列のときは |要素| の1つだけだったのと比べてみてください。


8. 配列の中にハッシュを入れる

実際のプログラムでは、「ハッシュを配列に並べる」形がよく登場します。たとえば「複数人のユーザー情報」は次のように表せます。

users = [
  { name: "太郎", age: 20 },
  { name: "花子", age: 25 },
  { name: "次郎", age: 18 },
]

users.each do |u|
  puts "#{u[:name]}さん #{u[:age]}歳"
end

# 太郎さん 20歳
# 花子さん 25歳
# 次郎さん 18歳

💡 この「ハッシュの配列」は、データベースから取り出したデータや、JSONで受け取るデータとほぼ同じ形です。個別の値には users[0][:name] のように [ ] を重ねてアクセスします。


9. よく使うメソッド 早見表

配列

メソッドできること
length / size要素数を数える
include?(値)値が含まれるか(true / false)
push / << / pop末尾に追加 / 末尾を取り出して削除
unshift / shift先頭に追加 / 先頭を取り出して削除
first / last先頭の要素 / 末尾の要素
join(",")要素を区切り文字でつないで文字列にする
sort / reverse並べ替え / 逆順にする
sum / min / max合計 / 最小 / 最大(数値の配列)

ハッシュ

メソッドできること
keys / valuesキーの一覧 / 値の一覧を取り出す
key?(キー)キーが存在するか
fetch(キー, 初期値)キーの値を取り出す(なければ初期値)
delete(キー)キーと値のペアを削除する
each { |k, v| ... }キーと値を1組ずつ処理する
sizeペアの数を数える

10. まとめ

  • 配列(Array)[ ]ハッシュ(Hash){ }。Rubyでは別の型
  • 配列は [0] で取り出し、[-1] でうしろから数えられる。存在しない番号は nil
  • 追加は << / push、削除は delete / delete_at、要素数は length
  • ハッシュのキーはシンボル(:name)が定番。{ name: ... } と書いて [:name] で取り出す
  • 存在しないキーは nilfetch(キー, 初期値) で初期値を決められる
  • 繰り返しは each。配列は |要素|、ハッシュは |キー, 値|

👉 「配列やハッシュを作る → each で回す → p で中身を確認する」の流れに慣れておくと、この先のデータ操作がぐっと分かりやすくなります。まずは小さな配列・ハッシュで、追加・取り出し・繰り返しを試してみましょう。

-Ruby
-, , , ,