バナー画像

Rubyには配列を操作する便利なメソッドがたくさんありますが、配列の先頭に要素を追加するメソッドがunshiftです。

配列の先頭に要素を追加するとインデックスを振りなおす必要があるので面倒ですが、unshiftメソッドならインデックスの数字を意識することなく使える便利なメソッドです。今回はunshiftメソッドの使い方と使用例を紹介します。

Rubyで配列を操作する

Rubyには配列を操作する便利なメソッドがいくつもあります。今回紹介するunshiftもそのようなメソッドの1つです。unshiftメソッドを解説する前に、配列を操作するメソッドの使い方について紹介します。

配列の先頭に要素を追加するには

もし、配列の先頭に要素を追加する場合、どうすればいいでしょうか。多くのプログラム言語では、インデックスをずらして、最後に先頭に要素を追加します。

例えば下記のような配列の先頭に要素0を追加したとします。すると、配列arr[]のインデックスの数字をずらさなければなりません。

配列の先頭に要素を追加する例
(追加前) arr[0] = 1, arr[1] = 2, arr[2] = 3
(追加後) arr[0] = 0, arr[1] = 1, arr[2] = 2, arr[3] = 3

Rubyではメソッドを使う

先ほど紹介したように配列の先頭に要素を追加した場合、インデックスの数字をずらさなければなりません。しかしRubyには配列を操作する便利なメソッドがあります。そして配列の先頭に要素を操作するメソッドがshiftメソッドとunshiftメソッドです。

shiftメソッドとunshiftメソッドを使えば、次のようにシンプルなプログラムを記述できます。

配列の先頭から要素を取り出す例

a = [1, 2, 3, 4, 5].shift
p a  # [2, 3, 4, 5] を表示する(先頭の1が削除されている)

配列の先頭に要素を追加する例

a = [1, 2, 3, 4, 5].unshift 0
p a  # [0, 1, 2, 3, 4, 5] を表示する(先頭に0が追加されている)

配列の最後の要素を操作する

先ほど配列の先頭に要素を削除したり追加する使い方を説明しましたが、配列の最後の要素を削除したり追加するメソッドもあります。

配列の最後を取り出すのはpopメソッドで、配列の最後に要素を追加するにはpopメソッドです。

配列の最後から要素を取り出す例

a = [1, 2, 3, 4, 5].pop
p a  # [1, 2, 3, 4] を表示する(最後の5が削除されている)

配列の最後に要素を追加する例

a = [1, 2, 3, 4, 5].push 6
p a  # [1, 2, 3, 4, 5, 6] を表示する(最後に6が追加されている)

unshiftメソッドの使い方

先ほど紹介したように配列の先頭に要素を追加するにはunshiftメソッドを使います。なおunshiftを使うことで配列の先頭に複数の要素を追加することも可能です。次からunshiftメソッドの文法や使い方を紹介します。

unshiftの文法

unshiftメソッドはArrayクラスのメソッドの1つで、指定されたオブジェクトを配列の先頭に引数で指定した要素を挿入します。なおこのメソッドは対象となる配列を変化させてしまうので注意してください。

unshiftの文法

配列.unshift オブジェクト

unshiftメソッドの例

arr = [1, 2, 3]
arr.unshift 0
p arr  # [0, 1, 2, 3]を表示する

またunshiftの引数に複数のオブジェクトを指定した場合、その順序で配列の先頭に追加します。

複数のオブジェクト追加するunshiftメソッドの例

arr [3, 4, 5]
arr.unshift 1, 2
p arr  # [1, 2, 3, 4, 5]を表示する

unshiftメソッドと同じ機能のメソッド

Rubyには別名が設定されたメソッドがいくつもあります。そしてunshiftメソッドにも別名のメソッドがあり、それがprependメソッドも利用可能です。

prependメソッドの文法

配列.prepend オブジェクト

prependメソッドの使用例

rr = [1, 2, 3]
arr.prepend 0
p arr  # [0, 1, 2, 3]を表示する

またprependメソッドも複数のオブジェクトを追加できます。

複数のオブジェクト追加するprependメソッドの例

arr [3, 4, 5]
arr.prepend 1, 2
p arr  # [1, 2, 3, 4, 5]を表示する

unshiftメソッドの使用例

配列の末尾に要素を追加するpushメソッドは、新たに配列を作る際などでよく利用されます。しかし先頭に要素を追加するunshiftメソッドを使うケースは少ないかもしれません。

次からunshiftメソッドの使用例を紹介します。

Rubyの参照パスを追加する

Rubyのrequireメソッドで指定できる外部ライブラリの参照パスは、Rubyの環境変数$LOAD_PATHに登録されており、これを編集することで参照パスの追加が可能です。なお環境変数$LOAD_PATHは配列です。優先して参照してほしいパスはunshiftメソッドで配列の先頭に入れてください。

実行中のソースファイルがあるディレクトリを参照パスの先頭に追加する命令は次のとおりです。

$LOAD_PATH.unshift File.dirname(__FILE__)

unshiftで配列を追加したら?

もしunshiftメソッドで追加するオブジェクトに配列を指定したらどうなるでしょうか。配列はオブジェクトです。そのまま要素として挿入されるので、2次元の配列が作られます。つまり配列を連結するのにunshiftメソッドは使えません。

unshiftメソッドで配列を追加したら

先ほど紹介したように、もしunshiftメソッドの引数に配列を指定した場合、その配列が先頭に追加されるので2次元の配列が作られます。

unshiftメソッドで配列を追加した例

arr = [3, 4, 5]
add = [1, 2]
arr.unshift add
p arr  # [[1, 2], 3, 4, 5]

配列を結合するには

先ほど紹介したように、unshiftメソッドでは配列同志を連結できません。末尾に追加するpushメソッドも同じです。Rubyで配列を結合するにはどうすれば良いでしょうか。

配列を結合するにはconcatメソッドを使用します。concatメソッドは対象となる配列の末尾に、引数の配列の要素を追加します。なおconcatとは連結という意味の英単語です。

concatメソッドの使用例

arr = [1, 2, 3]
add = [4, 5]
arr.cpncat add
p arr  # [1, 2, 3, 4, 5]

配列同志を+演算子で連結する

先ほどconcatメソッドによる配列の連結方法を紹介しましたが、+演算子を使っても配列の連結が可能です。元の配列を残したい場合は、+演算子を利用してください。

+演算子を使った配列連結例

arr = [1, 2, 3]
add = [4, 5]
out = arr + add
p out  # [1, 2, 3, 4, 5]

まとめ

これまで紹介したようにunshiftメソッドは引数で指定したオブジェクトを配列の先頭に追加するメソッドです。ただし対象とする配列を変更してしまうので注意してください。

なおunshiftっメソッドの引数に配列を指定すると2次元の配列が作られます。もし、配列を連結したい場合は、concatメソッドや+演算子を利用しましょう。

配列の末尾に要素を追加するpushメソッドと違い、unshiftメソッドはRubyのプログラムの中で利用されるケースは少ないかもしれません。しかしRubyのプログラムでは、配列の操作をメソッドで処理するケースが多いので、ぜひunshiftメソッドを利用し、Rubyらしいシンプルで読みやすいプログラムを作成してください。

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。