【Ruby入門】配列とHash(ハッシュ)を使う!要素の指定や追加方法【#6】


こんにちは。Tomoyuki(@tomoyuki65)です。

みなさん、配列やHash(ハッシュ)を聞いたことはありますか?

 

Rubyでは、配列やハッシュを使うとオブジェクトをまとめることができるんです。

 

この記事では、そんな配列とハッシュについて解説します。

 



配列とは?

 

配列は複数のオブジェクトをまとめることができるオブジェクトです。例として上記図をご覧下さい。

図では、文字列オブジェクトが3つあり、それを配列「pets」にまとめています。

これをプログラムにした場合、以下のように書くことができます。

# 配列の作り方は、[]の中にそれぞれの要素を書きます。
pets = ["ネコ", "イヌ", "インコ"]

# 配列を表示
p pets

 

実行結果
[“ネコ”, “イヌ”, “インコ”]

 

配列の要素を指定する方法

配列は各要素を指定することができます。

要素の指定には、添字(インデックス)を指定します。

 

では以下のプログラムを実行してみて下さい。

# 配列の作り方は、[]の中にそれぞれの要素を書きます。
pets = ["ネコ", "イヌ", "インコ"]

# 添字は0から始まるため、"ネコ"を指定する場合の添字は「0」とする。
p pets[0]

 

実行結果
“ネコ”

 

他にも要素の指定方法が色々あります。

以下のプログラムを実行してみて下さい。

# 配列「pets」
pets = ["ネコ", "イヌ", "インコ"]

# 添字はマイナスの値を指定できます。
p pets[-1]  # 末尾
p pets[-2]  # 真ん中

# 添字は範囲を指定できます。
p pets[0..2]  # 0から2までを指定
p pets[0...2] # 0から2の直前までを指定

# 範囲外の添字を指定した場合
p pets[4] # nil(何も無いという意味のオブジェクト)を返す

 

実行結果
“インコ”
“イヌ”
[“ネコ”, “イヌ”, “インコ”]
[“ネコ”, “イヌ”]
nil

 

配列の値を書き換える方法

配列に設定した値は書き換えることができます。

では以下のプログラムを実行してみて下さい。

# 配列「pets」
pets = ["ネコ", "イヌ", "インコ"]

# 1つ目の要素"ネコ"を"ゾウ"に書き換える場合
pets[0] = "ゾウ"
p pets

# 2つ目と3つ目を同時に書き換える場合
pets[1..2] = ["キリン", "カバ"]
p pets

# 要素を追加する場合
pets.push("ペンギン")  # pushメソッド
pets << "ラッコ"  # 「<<」でpushメソッドを省略した場合
p pets

 

実行結果
[“ゾウ”, “イヌ”, “インコ”]
[“ゾウ”, “キリン”, “カバ”]
[“ゾウ”, “キリン”, “カバ”, “ペンギン”, “ラッコ”]

 

配列オブジェクトのメソッド

配列にも様々なメソッドがあります。

例として以下のプログラムを実行してみて下さい。

# 配列「pets」
pets = ["ネコ", "イヌ", "インコ"]

# sizeまたはlengthメソッドは要素の数を返す。
p pets.size
p pets.length

# sortメソッドは配列の要素をソートした新しい配列を返す。
p pets.sort

 

実行結果
3
3
[“イヌ”, “インコ”, “ネコ”]

 

Arrayクラス

配列オブジェクトの元になっているクラスは、Arrayクラスです。

Arrayクラスを使った場合は、以下のように書くことができます。

# Arrayクラスを使った場合
pets = Array["ネコ", "イヌ", "インコ"]

# 配列を表示
p pets

 

実行結果
[“ネコ”, “イヌ”, “インコ”]

 

空のオブジェクトを定義する場合
array1 = []

array2 = Array.new  # Arrayクラスを使う場合

 



Hash(ハッシュ)とは?

 

ハッシュは連想配列とも呼ばれ、配列と同様にオブジェクトをまとめることができます。

ハッシュの場合は、「キー」と「値」をペアでまとめます。

 

例として上記図をご覧下さい。図では果物の種類(キー)と値段(値)をハッシュ「fruits」にまとめています。

これをプログラムにした場合、以下のように書くことができます。

# 果物の種類と値段をまとめたハッシュ「fruits」
fruits = {"ringo" => 100, "mikan" => 50, "nasi" => 150}
p fruits

 

実行結果は以下の通りです。

実行結果
{“ringo”=>100, “mikan”=>50, “nasi”=>150}

 

また、ハッシュはシンボル「:」を使った書き方ができます。

以下のプログラムを実行してみて下さい。

# シンボルを使った場合
fruits = {:ringo => 100, :mikan => 50, :nasi => 150}
p fruits

# さらに省略した書き方。
fruits2 = {ringo: 100, mikan: 50, nasi: 150}
p fruits2

 

実行結果
{:ringo=>100, :mikan=>50, :nasi=>150}
{:ringo=>100, :mikan=>50, :nasi=>150}

 

シンボルとは?

シンボルは文字列と一対一に対応した記号で、文字列のように見えますが内部では数値として扱われます。

そのため比較や検索などの速度面で有利です。

 

以下のプログラムを実行してみて下さい。

# 文字列の場合の変数毎のオブジェクトID
str1 = "Apple"
str2 = "Apple"
p str1.object_id
p str2.object_id

# シンボルの場合の変数毎のオブジェクトID
simbol1 = :Apple
simbol2 = :Apple
p simbol1.object_id
p simbol2.object_id

 

実行結果
47317485803040
47317485803020
917668
917668

 

実行結果の通り、文字列の場合は変数毎にオブジェクトIDが異なりますが、シンボルの場合は一意のオブジェクトIDとなります。

 

ハッシュの要素を指定する方法

ハッシュについても各要素を指定することができます。

要素を指定するには、キーを指定します。

 

では以下のプログラムを実行してみて下さい。

# キーが文字列の場合
fruits = {"ringo" => 100, "mikan" => 50, "nasi" => 150}
p fruits["ringo"]

# キーがシンボルの場合
fruits = {ringo: 100, mikan: 50, nasi: 150}
p fruits[:ringo]  # 「ringo:」でないので注意

 

実行結果
100
100

 

ハッシュの値を書き換える方法

ハッシュに設定した値は書き換えることができます。

では以下のプログラムを実行してみて下さい。

# シンボルを使ったハッシュの場合
fruits = {ringo: 100, mikan: 50, nasi: 150}
p fruits

# キー「mikan:」の値を「80」に変える場合
fruits[:mikan] = 80
p fruits

 

実行結果
{:ringo=>100, :mikan=>50, :nasi=>150}
{:ringo=>100, :mikan=>80, :nasi=>150}

 

ハッシュの要素を追加するには?

ハッシュに存在しないキーで代入した場合、要素が追加されます。

以下のプログラムを実行してみて下さい。

# シンボルを使ったハッシュの場合
fruits = {ringo: 100, mikan: 50, nasi: 150}
p fruits

# ハッシュに存在しないキー「:meron」に値「900」を代入した場合
fruits[:meron] = 900
p fruits

 

実行結果
{:ringo=>100, :mikan=>50, :nasi=>150}
{:ringo=>100, :mikan=>50, :nasi=>150, :meron=>900}

 

また、ハッシュに要素を追加する方法として、storeメソッドがあります。

以下プログラムを実行してみて下さい。

# シンボルを使ったハッシュの場合
fruits = {ringo: 100, mikan: 50, nasi: 150}
p fruits

# storeメソッドを使った場合
fruits.store(:mikan, 80)    # 値を変更
fruits.store(:meron, 980)   # 要素の追加
p fruits

 

実行結果
{:ringo=>100, :mikan=>50, :nasi=>150}
{:ringo=>100, :mikan=>80, :nasi=>150, :meron=>980}

 

ハッシュオブジェクトのメソッド

ハッシュにも様々なメソッドがあります。

例として以下のプログラムを実行してみて下さい。

# シンボルを使ったハッシュの場合
fruits = {ringo: 100, mikan: 50, nasi: 150}

# 要素数を返すメソッド「size」
p fruits.size

# キーの一覧を返すメソッド「keys」
p fruits.keys

# 値の一覧を返すメソッド「values」
p fruits.values

# キーが存在すれば「true」を返すメソッド「has_key?」
p fruits.has_key?(:mikan)

# ハッシュが空であれば「true」を返すメソッド「empty?」
p fruits.empty?

 

実行結果
3
[:ringo, :mikan, :nasi]
[100, 50, 150]
true
false

 

Hashクラス

ハッシュオブジェクトの元になっているのはHashクラスです。

Hashクラスを使った場合は、以下のように書くことができます。

# Hashクラスを使った場合
fruits = Hash[ringo: 100, mikan: 50, nasi: 150]
p fruits

 

実行結果

{:ringo=>100, :mikan=>50, :nasi=>150}

 



ハッシュと配列の相互変換

ハッシュから配列、配列からハッシュへ相互変換することができます。

ハッシュから配列への変換には「to_a」メソッド、配列からハッシュへは「to_h」メソッドを使います。

 

では以下のプログラムを実行してみて下さい。

# ハッシュの定義
fruits = {ringo: 100, mikan: 50, nasi: 150}

# ハッシュから配列に変換
p fruits.to_a

# ハッシュから配列に変換し、再度ハッシュに変換
p fruits.to_a.to_h

 

実行結果
[[:ringo, 100], [:mikan, 50], [:nasi, 150]]
{:ringo=>100, :mikan=>50, :nasi=>150}

 

ハッシュから配列に変換した場合の要素を指定するには?

ハッシュは二つの要素を持っているため、ハッシュから配列に変換した場合は配列の中に配列が設定されます。

その場合も、配列の各要素を指定することができます。

 

では以下のプログラムを実行してみて下さい。

# ハッシュの定義
fruits = {ringo: 100, mikan: 50, nasi: 150}

# ハッシュから配列に変換後、一つ目の要素を指定
p fruits.to_a[0]  # 添字「0」

# 配列の中の配列の一つ目の要素を指定(シンボル「:ringo」を指定したい場合)
p fruits.to_a[0][0]

 

実行結果
[:ringo, 100]
:ringo

 



配列の%記法

文字列には%記法がありますが、配列にも%記法があります。

では以下のプログラムを実行してみて下さい。

# 文字列オブジェクト
neko = "ネコ"

# %Wは式展開可能
pets = %W(#{neko} イヌ インコ)
p pets

# %wは式展開不可
pets2 = %w(#{neko} イヌ インコ)
p pets2

 

実行結果
[“ネコ”, “イヌ”, “インコ”]
[“\#{neko}”, “イヌ”, “インコ”]

 

まとめ

  •  配列やハッシュを使うとオブジェクトをまとめることができる
  •  配列の要素を指定するには、添字(インデックス)を指定する
  •  配列の添字は0から始まる
  •  ハッシュ(連想配列)はキーと値をペアでまとめる
  •  ハッシュの要素を指定するには、キーを指定する
  •  ハッシュのキーはシンボルを使った方が速度面で有利
  •  配列オブジェクトの元はArrayクラス、ハッシュオブジェクトの元はHashクラス
  •  配列やハッシュにも様々なメソッドがあり、よく使うものは覚えよう

 

  •  関連記事

【無料あり】Ruby入門サイトおすすめ3選!初心者向けの学習方法を解説

2017年10月24日

【Ruby入門】オブジェクトとは?オブジェクト指向で設計や開発する理由【#3】

2017年7月26日

 

The following two tabs change content below.

Tomoyuki

SEを5年経験後、全くの未経験ながら思い切ってブロガーに転身し、月間13万PVを達成。その後コロナの影響も受け、以前から興味があったWeb系エンジニアへのキャリアチェンジを決意。現在はWeb系エンジニアとして働きながら、プロゲーマーとしても活躍できるように活動中。








シェアはこちらから


おすすめのゲーミングPCまとめ

近年、eスポーツという言葉が浸透し、ゲーミングPCの需要も増えましたが、「ゲーミングPCはどう選べばいいの?」という人も多いのではないでしょうか。そんなPC初心者でも迷わず選べるよう、おすすめのゲーミングPCをご紹介します!


コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です