Rubyの配列(Array)を基本から解説
ほとんどのプログラミング言語に備わっている基本的な要素のひとつに、配列があります。
配列とはデータ集合のひとつで、先頭から順に割り振られたインデックス番号で要素を管理するデータ構造です。
今回は、Rubyで配列を扱う方法を実際のコードを交えながら解説していきます。
Rubyにおける配列 (Array) とは
配列とは、データ集合のひとつです。
プログラムがデータを扱うにあたり、ひとまとまりのデータをある種の集合として管理することがあります。データ集合には様々な形のものがありますが、配列はデータ集合においてもっとも基本的なものです。
配列とは
配列は、先頭から順に振られたインデックス番号をもとに要素を管理するデータ構造です。
割り振られた番号をもとに値を取得したり、更新したりすることが出来るデータ構造であり、値を追加する場合は基本的には末尾に新しく要素が追加されます。
Rubyにおける配列
Rubyにおいて、配列はArrayというクラスで扱うことができます。
Arrayクラスはデータ集合をゼロから始まるインデックス番号で管理します。
インデックス番号がゼロから始まるため、要素が3つの配列があるとしたら、
一つ目の要素のインデックス番号はゼロ、
二つ目の要素のインデックス番号は1、
三つ目の要素のインデックス番号は2になることに気を付けてください。
Rubyで配列を扱う
ここから実際のコードを交えながらRubyの配列を解説していきます。
配列はプログラミングにおいて頻繁に使用する存在なので、しっかりと扱えるようになりましょう。
配列を作成する
Rubyで配列を作成するには、配列式を使います。
配列式は [ 要素1, 要素2, 要素3, ... ] という記法で書くことで、それらの順で要素を保持するArrayクラスのインスタンスを作成します。
arr = [10, 20, 30, 40]
p arr # => 実行結果:[10, 20, 30, 40]
配列に要素を追加する
作成済みの配列に要素を追加するためのメソッドとして、RubyではArray.pushメソッドが用意されています。
pushメソッドは 配列.push(追加する要素) という記法で実行することができます。
arr = [10, 20, 30, 40]
arr.push(50) # 配列arrに要素(50)を追加する
p arr # => 実行結果:[10, 20, 30, 40, 50]
配列から要素を削除する
先ほど配列に要素を追加したのとは逆に、配列から要素を削除するためのメソッドも、RubyのArrayクラスには用意されています。
Arrayクラスには、要素を削除するための手段として様々なメソッドが用意されていますが、今回はその中でもっとも基本的なArray.deleteメソッド、Array.delete_atメソッドを紹介します。
メソッド名:Array.deleteメソッド
- 書き方:配列.delete(削除する値)
- 挙動:引数で指定した『削除する値』と値が一致する要素を全て削除します。
- 注意点:値が一致する要素を『全て』削除するということに気を付けてください。
メソッド名:Array.delete_atメソッド
- 書き方:配列.delete_at(削除する要素のインデックス番号)
- 挙動:引数で指定した『削除する要素のインデックス番号』の要素を削除します。
- 注意点:引数に負の数を指定すると、末尾から数えた位置の要素を削除します( たとえば引数に -1 を指定すると、配列の最後尾の要素が削除されます)。
# Array.deleteメソッド
arr = [10, 20, 30, 10, 40, 50, 60]
arr.delete(10)
p arr # => 実行結果:[20, 30, 40, 50, 60]
# Array.delete_atメソッド
arr.delete_at(2)
p arr # => 実行結果:[20, 30, 50, 60]
配列と配列を結合する
ふたつの異なる配列をひとつの配列に結合するとき、Rubyでは主にふたつの基本的な方法があります。 ひとつはプラス演算子で配列を結合する方法。 もうひとつはArray.concatメソッドを使用する方法です。
プラス演算子もArray.concatメソッドもどちらもふたつの配列をひとつに結合するものですが、以下の違いがあります。
プラス演算子の場合
ふたつの配列を足して、異なる新しい配列を作成する(元の配列は変更されない) 。Array.concatメソッドの場合
Array.concatメソッドを実行する側の配列に、引数で指定した配列が継ぎ足される(元の配列が変更される)
# プラス演算子で配列を結合する
arr1 = [2, 4, 6, 8]
arr2 = [3, 6, 9, 12]
arr3 = arr1 + arr2
p arr3 # => 実行結果:[2, 4, 6, 8, 3, 6, 9, 12]
p arr1 # => 元の配列は変化しない:[2, 4, 6, 8]
p arr2 # => 元の配列は変化しない:[3, 6, 9, 12]
# Array.concatメソッドで配列を結合する
arr1 = [2, 4, 6, 8]
arr2 = [3, 6, 9, 12]
arr1.concat(arr2)
p arr1 # => 元の配列が変化する:[2, 4, 6, 8, 3, 6, 9, 12]
p arr2 # => 追加した配列側は変化しない:[3, 6, 9, 12]
元の配列を変化させたくない場合にはプラス演算子を使用し、変化させたい場合にはArray.concatメソッドを使うとよいでしょう。 方法ごとの特徴をおさえ、状況に応じた適切な方法の選択を出来るようにしていきましょう。
まとめ
Rubyで配列を扱う方法をまとめると、次のようになります。
- 配列の作成:配列式でArrayクラスのオブジェクトを作成する
- 要素の追加:Array.pushメソッドを使用
- 一致する値の要素を削除:Array.deleteメソッドを使用
- 要素のインデックス番号を指定して削除:Array.delete_atメソッドを使用
- 元の配列を変化させずに配列を結合:プラス演算子を使用
- 元の配列を変化させる形で配列を結合:Array.concatメソッドを使用
このように、配列を操作するためのメソッドには様々なものが用意されています。
同じような動作のものでも、Array.deleteメソッドとArray.delete_atメソッドのように削除対象を指定する方法が異なるものがあったり、プラス演算子とArray.concatメソッドのように自身を変化させるかさせないかという違いがあったりします。
Rubyにはこの他にも『似たような動作だが少しだけ性質の異なるメソッド』が数多く存在します。 新たにメソッドを学習するときには、こういった少しの性質の異なりにも目を向けていくと、Rubyの細やかなところまで扱うことが出来るようになるでしょう。
この記事のキーワードに関する勉強会・イベントを探す
TECH PLAYでは、ITエンジニア向けの勉強会・イベント情報を提供しています。興味のある方はぜひご参加ください。