Ruby初心者向けに、配列の末尾に要素を追加する「push」メソッドの使い方を解説していきます。
配列操作は、Rubyでプログラミングをする上での基本的な知識になるため、是非マスターしておきましょう。
Rubyの配列についての基本を学びたい方は、こちらの記事もご覧ください。
【関連記事】
▶【Ruby入門】Arrayクラスの使い方と応用例
「push」メソッドで要素を追加
Rubyで配列の末尾に要素を追加する場合、push()メソッドを使います。
配列オブジェクト.push(追加する要素, …)
push()メソッドの引数には、配列の末尾に追加したい要素を指定します。
引数を複数指定すると、先頭に指定した値から順に配列の末尾に要素が複数追加されます。
基本的な使い方
では、push()メソッドを使って、配列に要素を追加するサンプルコードを見ていきましょう。
# 配列を宣言
array = ["Google", "Apple", "Facebook", "Amazon"]
p array
# 要素を配列の末尾に追加
array.push("Microsoft")
p array
実行結果
---------------------
["Google", "Apple", "Facebook", "Amazon"]
["Google", "Apple", "Facebook", "Amazon", "Microsoft"]
複数の要素を一気に複数追加
push()メソッドに複数の引数を指定して、引数の先頭から順に複数の要素を追加することもできます。
# 配列を宣言
array = ["Ruby", "PHP"]
p array
# pushメソッドに複数の引数を指定し、要素をまとめて追加
array.push("C++", "Java")
p array
実行結果
---------------------
["Ruby", "PHP"]
["Ruby", "PHP", "C++", "Java"]
「<<」や「append」でも要素の追加が可能
push()メソッド以外に、「<<」や「append」メソッドを使用して配列に要素を追加する方法もあります。これらのメソッドの使い方についても確認しましょう。
「append」メソッド
append()はpush()の別名メソッドです。そのため、メソッド名が異なるだけで使い方や機能はpush()メソッドとまったく同じです。
## 配列を宣言
array = ["Google"]
## appendで要素を1件追加
array.append("Apple")
p array
## pushと同じく引数を複数指定することも可能
array.append("Facebook", "Amazon")
p array
実行結果
---------------------
["Google", "Apple"]
["Google", "Apple", "Facebook", "Amazon"]
「<<」演算子
Rubyでは「<<」演算子を使って配列に要素を追加することもできます。「<<」演算子では、左辺に配列オブジェクト、右辺に追加する要素を指定して配列の末尾に要素を追加します。
## 配列を宣言
array = ["Google"]
## 「<<」演算子で要素を1件追加
array << "Apple"
p array
## 複数の要素を追加する場合は「<<」演算子で複数続けて記述する
array << "Facebook" << "Amazon"
p array
実行結果
---------------------
["Google", "Apple"]
["Google", "Apple", "Facebook", "Amazon"]
非破壊的に要素を追加する「+」演算子
ここまで紹介した push()やappend()、<<演算子はどれも要素の追加を破壊的に行うメソッドです。
破壊的メソッドとは、 push()で配列に要素を追加するように、メソッドの呼び出し元であるオブジェクト自身の値を変更してしまうメソッドのことを指します。
ここからは、元の配列の要素は変更せずに、別の新たな配列に要素を追加する、非破壊的メソッドの使用方法を解説していきます。
「+」演算子で配列同士を結合
数値の加算を行う「+」演算子ですが、Rubyでは配列同士を結合する用途でも使用することができます。「+」演算子を使用すると、2つの配列を結合した新たな配列が作成されるため、元の配列オブジェクトが変更されることはありません。
# 配列を定義
array1 = ["Ruby", "PHP"]
# 「+」演算子で配列同士を結合した新たな配列(array2)を作成
array2 = array1 + ["C++", "Java"]
# array1とarray2の内容をそれぞれ出力
p array1
p array2
実行結果
---------------------
["Ruby", "PHP"]
["Ruby", "PHP", "C++", "Java"]
このように、「+」演算子を使用することで2つの配列同士を結合した新たな配列が作成され、さらに元の配列の内容を変更することなく非破壊的に要素を追加した配列が作れます。
配列を複製してから要素を追加
「+」演算子を用いずに非破壊的に要素を追加する別の方法として、配列の複製をするdupメソッドを使った方法があります。
dupメソッドで要素の内容をコピーし、コピーされた配列に対して要素を追加することで、非破壊的に要素を追加することが可能です。
# 配列を定義
array1 = ["Ruby", "PHP"]
# dupメソッドで array1の配列コピーしたarray2を作成
array2 = array1.dup
# コピーしたarray2に対して要素を追加
array2.push("C++", "Java")
# array1とarray2の内容をそれぞれ出力
p array1
p array2
配列に要素を挿入する
配列の末尾ではなく、配列の指定した位置(インデックス)に要素を挿入する場合は、insert()メソッドを使用します。
配列オブジェクト.insert(挿入インデックス, 挿入する要素)
insert()メソッドの第1引数には、挿入する位置の0から始まるインデックスで指定し、2つめの引数には、挿入する要素の値を指定します。
第1引数のインデックスにマイナスの値を指定すると、配列末尾から数えたインデックスの位置に要素を挿入ことも可能です。
「insert」の基本的な使い方
では、insert()メソッドを使って配列に要素を挿入するサンプルコードを見ていきましょう。
次の例は、配列の先頭から数えて2番目の要素に”Python”という値の要素を挿入するサンプルコードです。
# 配列を定義
array = ["Ruby", "PHP", "C++"]
# 要素を挿入
array.insert(1, "Python")
p array
実行結果
---------------------
["Ruby", "Python", "PHP", "C++"]
第1引数のインデックスにマイナス値を指定して、後ろから数えた位置に要素を追加する例も確認してみましょう。
次の例は、配列の後ろから数えて2番目の要素に、”Python”という値を挿入するサンプルコードです。
# 配列を定義
array = ["Ruby", "PHP", "C++", "Java", "C#"]
# 要素を挿入
array.insert(-2, "Python")
p array
実行結果
---------------------
["Ruby", "PHP", "C++", "Java", "Python", "C#"]
このように、挿入位置にマイナス値を指定した場合、-1が配列の最も末尾となり、-2が末尾から数えて2番目になります。
配列への追加、挿入をマスター
Rubyで配列に要素を追加する、「push」メソッドなどについて解説してきました。
プログラミングにおいて、配列操作は避けては通れない基本の知識ですのでマスターしていきましょう。
- 配列に要素を追加する時は「push」「append」「<<」を使う
- 非破壊的に要素を追加する時は「+」演算子を使用する
- 配列の途中の位置に要素を挿入する時は「insert」を使用する
【関連記事】
▶Rubyのif文で条件分岐!数値や文字列の比較方法を解説