最初に覚えておきたい Ruby での配列(Array)の使い方を解説します。
これを見れば、ひととおりの配列の基本操作が覚えられます。
そもそも配列とは何か? という解説はこちら。
目次
配列を生成する
配列は []
を使って表します。
以下は「score」という変数を配列にするプログラム。
score = []
score = Array.new
で表す方法もあります。
あらかじめ配列に値を入れておきたい場合は、[値1, 値2, 値3, ……]
のように指定します。
以下は、最初から値を入れておく場合の例。
score = [80, 70, 90]
○番目の配列の値を取得する
配列の値は、先頭から 0, 1, 2, …… のように連番の添字の場所に保存されています。変数名[添字]
のようにして、特定の値を取得できます。
プログラム
score = [80, 70, 90]
p score[0] # 1つ目の値
p score[1] # 2つ目の値
p score[2] # 3つ目の値
実行結果
80
70
90
添字に負の値を使うことで、末尾から数えた場所の値を取得することもできます。
以下は、配列の末尾から2番目の値を取得する例。
プログラム
score = [80, 70, 90]
p score[-2]
実行結果
70
配列の値を順番に取得する
配列の値を順番に取り出して取得する場合は、each メソッドを使います。
以下は fruits の変数に格納されている配列の値を先頭から順番に取り出して表示する例。
プログラム
fruits = ["orange", "grape", "banana"]
fruits.each do |fruit|
p fruit
end
実行結果
"orange"
"grape"
"banana"
do |fruit| 〜 end
のブロック内に配列の要素ひとつひとつに対して行いたい処理を書きます。
fruit
には配列の要素の値が入ります。
今回は p fruit
で配列の値を表示しています。
each do 〜 end
の詳しい使い方はこちら。
配列の末尾に要素を追加する
配列の末尾に新たな値を追加する場合は <<
を使います。
プログラム
score = [80, 70, 90]
score << 60
p score
実行結果
[80, 70, 90, 60]
score.push(60)
のようにして配列の末尾に要素を追加することもできます。
配列の指定した要素を更新する
配列の中にある特定の値を更新することができます。
以下は、配列の 0番目の値を 10
、1番目の値を 20
に更新する例。
プログラム
score = [80, 70, 90]
score[0] = 10
score[1] = 20
p score
実行結果
[10, 20, 90]
配列の指定した値の要素を削除する
配列の指定した値の要素を削除したい場合は、delete メソッドを使います。
以下は、値が 70
の要素を削除する例。
プログラム
score = [80, 70, 90, 70]
score.delete(70)
p score
実行結果
[80, 90]
配列の○番目の要素を削除する
配列で ○番目の要素を削除したい場合は、delete_at メソッドを使います。
最初の要素を削除したい場合は 0
なので、2番目の要素を削除する場合は、以下のように 1
を指定します。
プログラム
score = [80, 70, 90]
score.delete_at(1)
p score
実行結果
[80, 90]
配列から重複した値を取り除く
配列から重複した値を取り除きたい場合は、uniq メソッドを使います。
プログラム
score = [80, 90, 70, 70, 80]
p score.uniq
実行結果
[80, 90, 70]
配列の要素を反転させる
配列の要素を反転(先頭の要素を一番後ろに、末尾の要素を一番前に順番を入れ替え)させたい場合は、reverse メソッドを使います。
プログラム
a = ["orange", "grape", "banana"]
p a.reverse
実行結果
["banana", "grape", "orange"]
配列の要素を反転させ、その変数の値を書き換えたい場合は、reverse! メソッドを使います。
プログラム
a = ["orange", "grape", "banana"]
a.reverse!
p a
実行結果
["banana", "grape", "orange"]
配列の要素数を取得する
配列の要素数を取得したい場合は、length もしくは size メソッドを使います。
プログラム
a = ["orange", "grape", "banana"]
p a.length
p a.size
実行結果
3
3
配列が空(要素がひとつもない)かどうかを調べる
配列が空(要素がひとつもない)かどうかを調べたい場合は、empty? メソッドを使います。
配列に要素が1つ以上ある場合は、以下のように false
が返ります。
プログラム
a = ["orange", "grape", "banana"]
p a.empty?
実行結果
false
配列が空(要素がひとつもない)の場合は、以下のように true
が返ります。
プログラム
a = []
p a.empty?
実行結果
true
最初の要素の値を取得する
最初の要素の値を取得したい場合は、first メソッドを使います。
プログラム
a = ["orange", "grape", "banana"]
p a.first
実行結果
"orange"
最後の要素の値を取得する
最後の要素の値を取得したい場合は、last メソッドを使います。
プログラム
a = ["orange", "grape", "banana"]
p a.last
実行結果
"banana"
指定した値が含まれるか確認する
指定した値が含まれるか確認したい場合は、include? メソッドを使います。
含まれる場合は true
、含まれない場合は false
の結果が返ってきます。
プログラム
a = ["orange", "grape", "banana"]
p a.include?("grape")
p a.include?("peach")
実行結果
true
false
指定した条件に合う要素を取得する
指定した条件に合う要素を取得したい場合は、find メソッドを使います。
以下は 75未満の条件に合う要素を取得する例。
プログラム
score = [80, 70, 90, 60]
p score.find {|s| s < 75 }
実行結果
70
先頭の要素から検索していき、最初に条件に一致した値のみが返ります。
s < 75
の部分を書き換えると別の条件でソートできます。
- 80以上の値:
s >= 80
- 5で割り切れる値:
s % 5 == 0
文字列から配列を生成する
文字列から区切りとなる文字を指定して配列に変換することができます。
以下はカンマ(,
)を区切り文字にして配列に変換する例。
プログラム
fruit_txt = "orange,grape,banana"
fruit = fruit_txt.split(",")
p fruit
実行結果
["orange", "grape", "banana"]
配列から文字列を生成する
配列から指定した区切り文字を使った文字列に変換することができます。
以下はカンマ(,
)を区切り文字にして文字列に変換する例。
プログラム
a = ["orange", "grape", "banana"]
p a.join(",")
実行結果
"orange,grape,banana"
配列を結合する
2つの配列を組み合わせて 1つの配列に結合したい場合は、+
を使います。
プログラム
a1 = ["orange", "grape", "banana"]
a2 = ["melon", "apple"]
fruits = a1 + a2
p fruits
実行結果
["orange", "grape", "banana", "melon", "apple"]
fruits = a1.concat(a2)
のようにして配列を結合することもできます。
配列の要素を並び替える
配列の要素を並び替えたい場合は、sort を使います。
以下は昇順に並び替える例。
プログラム
score = [80, 70, 90]
p score.sort
実行結果
[70, 80, 90]
降順に並び替える例。
プログラム
score = [80, 70, 90]
p score.sort {|a, b| b <=> a }
実行結果
[90, 80, 70]
b <=> a
の部分を書き換えると別の条件でソートできます。
- 昇順でソート:
a <=> b
- 値を整数に変換して昇順でソート:
a.to_i <=> b.to_i
まとめ
以上、Ruby での配列(Array)の使い方でした!
ここまでの内容をまとめておきます。
- 配列は
変数名 = []
で生成できる。 - 値を最初からセットしたい場合は
変数名 = [値1, 値2, 値3]
のようにして要素を追加することができる。 変数名[添字]
のようにして特定の要素を指定できる。- あらかじめ用意されているメソッドを使うことで、要素の追加、編集、検索、並べ替え、削除、変換などの操作が行える。