どんなプラグラミング言語にも配列という概念はあります。もちろんRubyにも配列が存在します。
この記事ではRubyの配列が持つ様々な便利メソッドを使用方法を添えて紹介していきたいと思います。
配列の作り方
はじめにRubyにおける配列の作り方を簡単に紹介しておきます。
Rubyは純粋オブジェクト指向言語と呼ばれるもので、この配列もArrayというクラスに属するものです。
そのため、他の言語ではインスタンスを作るような構文で配列を作ります。
(「p」 はデバッグ用に使われる関数でその次に指定した変数を出力してくれるものです。)
array = Array.new
p array
# []
毎回こう書かなければならないとしたらさすがにだるいですよね。でも、上記と同様の意味になるショートカットのような書き方が存在します。
array = []
p array
# []
初期値を与えることもできます。
array = [1, 2 ,3]
p array
# [1, 2 ,3]
独学は難しい・・・プログラミングはマンツーマン or グループレッスンで学ぶ
【完全無料のプログラミング&就活塾】
配列を操作する
Ruby言語に組み込みで用意されている便利なメソッドを含め、配列を操る様々な方法を簡単な使い方を交えて紹介していきます。
配列に値を追加する
配列に値を追加する方法を紹介します。追加する方法は幾つかあります。
「<<」演算子で末尾に値を追加する
「<<」演算子を用いることで配列の末尾に値を追加することが可能です。 必ず末尾に追加されることに注意しましょう。
array = Array.new
array << 1
array << 2
array << 3
p array
# [1, 2 ,3]
「push」メソッドで配列の末尾に値を追加する
「push」メソッドを利用することで「<<」演算子と同様の演算をすることができます。 指定した値を入れ配列の末尾に追加することができますが、メソッドを使用した配列自体が書きかわるので注意が必要です。
array = Array.new
array.push(1)
array.push(2)
array.push(3)
p array
# [1, 2 ,3]
「unshift」メソッドで配列の先頭に値を追加する
Rubyの配列には「unshift」というメソッドが存在し、これを用いることで指定した値を配列の先頭に追加することができます。
注意点としては「push」メソッドと同様にメソッドを使用した配列の中身が書き換わってしまうことです。
下記の例のように初期値として「10, 11, 12」を与えて作成した配列で「unshift」メソッドを使用して値を追加するその配列自他が書き換わります。
array = [10,11,12]
array.unshift(3)
array.unshift(2)
array.unshift(1)
p array
# [1, 2, 3, 10, 11, 12]
インデックスを指定して値を追加する
他のプログラミング言語でもよくある方法で値を追加することができます。配列の追加する位置を「[]」で指定して追加する方法です。
array = []
array[0] = 1 # 0番目に追加
array[1] = 3 # 1番目に追加
array[2] = 5 # 2番目に追加
p array
# [1, 3, 5]
下記のようにrubyの場合基本的に連番のインデックスを気にせずに値を追加することができてしまいます。
想定外のエラーはでないかわりにバグに気付きにくくながりがちですので注意しましょう
(「nil」は「値がないこと」を示す値です)
array = Array.new
array[3] = 1 # 3番目に1を追加 <- 0,1,2番目には自動的に「nil」が入る
# [nil, nil, nil, 1]
配列内の値を取り出す
配列内の値にアクセスする方法も幾つかあります。
インデックスを指定して値を参照する
配列といえばこの方法がもっとも一般的だと思います。下記は作成した配列の0番目の値を参照しています。
array = [1,2,3]
p array[0]
# 1
下記は存在しないインデックスを指定して配列にアクセスした例です。この場合「nil」が返ってきます。
array = [1,2,3]
p array[1000]
# nil
「at」メソッドを使って値を取り出す
「[]」で配列のインデックスを指定するのと同様のことが「at」メソッドを使用してもできます。
下記に例を示しますが、挙動もだいたい同じです。
array = [1,2,3]
p array.at(2)
# 3
p array.at(1000)
# nil
「pop」メソッドを使って末尾から値を取り出す
「pop」メソッドは「push」メソッドの対になるようなメソッドです。このメソッドを使用した配列の末尾から値を取り出します。
このメソッドを使用した場合、返り値として配列の末尾にあった値が返され、配列からその値は削除されます。
配列から値が削除されてしまうことに注意が必要です。
array = [1,2,3]
value = array.pop()
p value
# 3
p array
# [1,2]
「shift」メソッドを使って先頭から値を取り出す
「shift」メソッドは「unshift」メソッドの対になるようなメソッドです。このメソッドを使用した配列の先頭から値を取り出します。
上記で紹介した「pop」メソッドの先頭バージョンといった感じです。これもまた配列から値を削除してしまうのでその点だけ注意が必要です。
array = [1,2,3]
value = array.unshift()
p value
# 1
p array
# [2,3]
「last」メソッドを使って末尾の値を取り出す
「last」メソッドは「pop」メソッド同様に配列の末尾から値を取り出しますが、取り出した値を配列から削除したりはしません。
配列に影響を与えずに末尾の値を取得できるメソッドとなっています。
array = [1,2,3]
value = array.last()
p value
# 3
p array
# [1,2,3]
「first」メソッドを使って先頭の値を取り出す
「first」メソッドは「shift」メソッド同様に配列の先頭から値を取り出しますが、取り出した値を配列からの削除をしません。
「last」メソッド同様に配列に影響を与えずに末尾の値を取得できるメソッドとなっています。
array = [1,2,3]
value = array.first()
p value
# 1
p array
# [1,2,3]
まとめ
この記事ではRubyの配列への値の追加と取り出しを行う方法を紹介しました。同じようなことを行うための複数の方法が存在するのRubyの特徴です。
それぞれ微妙に挙動が違っていたりもするので、その違いをよく理解して使いましょう。
追記
少し応用的な使い方も解説しました。よかったらご覧ください。