【Ruby】配列の書き方と使い方の基本
開発環境
- Ruby version: ruby 3.1.2
Rubyの配列とは
Rubyの配列とは、任意の複数のオブジェクトを要素として持つことができる配列クラスです。 また、1列の配列の場合は1次元配列と言い、配列の中に配列がある2列の配列の場合は2次元配列と言いますが、2列以上の配列を総じて多次元配列と言います。 公式リファレンス:https://docs.ruby-lang.org/ja/latest/class/Array.html
配列の要素
配列の中の一つひとつのデータのことを要素と言います。
配列の要素数
配列の中にある要素の数を要素数と言います。
配列のインデックス番号
配列の中にある一つひとつの要素に割り振られている添字をインデックス番号と言います。 一つ目の要素はインデックス番号0、二つ目の要素はインデックス番号1と言ったように0から順番にインデックス番号が割り当てられます。
Rubyの配列の書き方
Rubyの配列の書き方をご紹介します。
配列でリテラル表現を使用した書き方
Rubyの配列でリテラル表現を使用した書き方です。
1array = ["要素1", "要素2", "要素3"]
リテラル表現[]の中で要素を「,(カンマ)」で区切るように記述することで配列を作成することができます。
配列でArrayクラスを使用した書き方
Rubyの配列でArrayクラスを使用した書き方です。
1array = Array["要素1", "要素2", "要素3"]
ただ、Rubyの配列はリテラル表現を使用して記述されることが一般的です。
Rubyの配列を操作する基本
Rubyの配列を操作するために必要な基本を解説していきます。
配列の初期化する
配列の初期化は下記のように記述します。
1# リテラル表現で配列を初期化する 2array = [] 3 4# Arrayクラスのnewメソッドで配列を初期化する 5array = Array.new()
リテラル表現、またはArrayクラスのnewメソッドで配列を初期化することができます。 また、上記のような状態を空の配列を作成するとも言います。
配列に要素を追加する
配列に要素を追加する場合は下記のように記述します。
1# 配列を作成 2array = ["要素1", "要素2", "要素3"] 3 4# pushメソッドで配列の末尾に要素を追加する 5array.push("要素4") 6 7# unshiftメソッドで配列の先頭に要素を追加する 8array.unshift("要素0") 9 10# 自己代入演算子で配列に要素を追加する 11array << "要素5" 12 13# インデックス番号を指定して配列に要素を追加する 14array[5] = "要素6"
unshiftメソッドは配列の先頭に要素を追加され、pushメソッドと自己代入演算子は、配列の一番最後に要素が追加されます。 また、インデックス番号を指定して配列に要素を追加することもできますが、すでにインデックス番号が割り振られた要素がある場合は上書きで代入されてしまうため、注意が必要です。
配列の要素を更新する
配列の要素を更新する場合は下記のように記述します。
1# 配列を作成 2array = ["要素1", "要素2", "要素3"] 3 4# インデックス番号を指定して要素を更新する 5array[1] = "要素2を更新" 6 7# インデックス番号を複数指定して要素を更新する 8array[0,2] = ["要素1を更新","要素3を更新"]
配列のインデックス番号を指定して要素を更新することができます。 また、インデックス番号を複数指定することで複数の要素を更新することもできます。
配列を結合する
配列に結合する場合は下記のように記述します。
1# 配列を作成 2array1 = ["要素1", "要素2", "要素3"] 3array2 = ["要素4", "要素5", "要素6"] 4 5# 算術演算子で配列を結合する 6array3 = array1 + array2 7 8# concatメソッドで配列を結合する 9p array4 = array1.concat(array2)
算術演算子やconcatメソッドで配列を結合させることができます。 ただし、concatメソッドの場合は元の配列が変化するので注意が必要です。
配列の要素を削除
配列の要素を削除する場合は下記のように記述します。
1# 配列を作成 2array = ["要素1", "要素2", "要素3","要素4", "要素5", "要素6"] 3 4# popメソッドで配列の末尾から要素を削除 5array.pop 6 7# shiftメソッドで配列の先頭から要素を削除 8array.shift 9 10# deleteメソッドで配列から削除する値を指定 11array.delete("要素4") 12 13# deleteメソッドで配列から削除するインデックス番号を指定 14array.delete_at(0)
deleteメソッドは値が一致する要素を『全て』削除されるため、注意が必要です。 また、delete_atメソッドは引数に負の数を指定すると、末尾から数えた位置の要素を削除することができます。
配列の要素を取得
配列の要素を取得する場合は下記のように記述します。
1# 配列を作成 2array = [10, 30, 50, 20, 40, 100] 3 4# インデックス番号を指定して要素を取得 5array[3] 6 7# find_allで条件に合う配列の要素をすべて取得 8p array.find_all { |n| n > 30 } 9 10# findで条件に合う配列の要素をを1つ取得 11p array.find { |n| n == 50 } 12 13# firstメソッドで配列の先頭の要素を取得 14array.first 15 16# lastメソッドで配列の末尾の要素を取得 17p array.last 18 19# maxメソッドで配列の最大値を取得 20array.max 21 22# minメソッドで配列の最小値を取得 23array.min
インデックス番号を指定して要素を取得する場合が基本になります。 また、Rubyには様々なメソッドがあるため、配列から条件に合わせて要素を取り出していくこともできます。
配列の要素数を取得する
配列の要素数を取得する場合は下記のように記述します。
1# 配列を作成 2array = [10, 30, 50, 20, 40, 100] 3 4# countメソッドで要素数を取得する 5array.count 6 7# sizeメソッドで配列の長さを取得する 8array.size 9 10# lengthメソッドで配列の長さを取得する 11array.length 12 13# countメソッドで条件を指定して要素数を取得する 14p array.count(50) 15p array.count { |num| num > 30 }
基本的にsizeメソッドとlengthメソッドは同じ挙動になります。 また、一般的にはcountメソッドでは配列の要素数を取得するだけでなく、条件にあった要素数を取得することもできます。
配列の展開
配列を展開する場合は下記のように記述します。
1# 配列を作成 2array = ["要素1", "要素2", "要素3"] 3p *array 4 5# => "要素1" 6# => "要素2" 7# => "要素3"
先頭に*(アスタリスク)をつけることで配列を展開することができます。
配列の分割
配列を分割する場合は下記のように記述します。
1# 配列を作成 2array = [10, 30, 50, 20, 40, 100] 3 4# each_sliceメソッドで要素数の数で配列を分割する 5array1 = array.each_slice(3).to_a 6 7# partitionメソッドで条件に合わせて配列を分割する 8array2 = array.partition{ |i| i > 30 } 9 10# .group_byメソッドで条件にあわせて配列を分割する 11array3 = array.group_by{ |i| i > 30 }
ただし、each_sliceメソッドはブロックを与えない場合は、Enumeratorが返ります。 そのため、配列に戻す場合はto_aで変換してあげる必要があります。
配列の比較
配列を比較する場合は下記のように記述します。
1# 配列を作成 2array1 = [10, 30, 50, 20, 40, 100] 3array2 = [10, 30, 50, 20, 40, 100] 4array3 = [15, 80, 30] 5 6# equal?メソッドで同じオブジェクトかを比較する 7array1.equal?(array1) # true 8array1.equal?(array2) # false 9 10# 比較演算子で同じ配列かを比較する 11array1 == array2 #true 12array1 == array3 #false 13 14# 配列を比較して重複した値を取り除く 15array1 - array3 # array1から30が取り除かれる 16 17# 配列を比較して重複した値だけを残す 18array1 & array3 # 30だけが残る
様々なメソッドや演算子により、配列を比較した結果を返すことができます。
おわりに
Rubyの配列の使い方を解説してきました。 プログラミングではデータのやり取りに配列は必要不可欠なほどよく使われますが、基本的な操作ができるようになれば自由にデータを処理することができます。 最初は難しいかもしれませんが、配列の基本的な使い方をマスターしていきましょう。