配列は、プログラミングにおける基本的な要素の1つです。配列は使う場面も多く、使い方を正確に把握しておかなければ、思わぬエラーにつながることもあります。
本記事では、Rubyにおける配列の使い方について解説します。基本的な操作と便利な各種メソッド、演算子の使い方について解説するので、ぜひ参考にしてみてください。
Rubyにおける配列とは
配列はプログラミング言語に備わっている基本的な要素の1つで、Rubyに限らずほとんどの言語で使われています。ここではまず、一般的に配列とはどのようなものなのかを解説し、Rubyにおける配列の扱いについて簡単にご紹介します。
配列とは
そもそも配列とは一体何なのでしょうか。配列とは、複数のデータに番号を割り振って管理するデータ構造を指します。プログラムがデータを管理する際、複数のデータをまとめて、集合として扱うことがよくあります。
データ構造には様々な種類がありますが、配列は先頭から順に割り当てられたインデックス番号を使って要素を管理します。割り振られた番号を元に要素の値を取得したり更新、追加したり、削除したりといった処理が可能です。
Rubyの配列の使い方
Rubyにおける配列は、「Array」というクラスで扱います。
Arrayも他のプログラミング言語と同じく、各要素にインデックス番号を割り振って管理します。インデックス番号は0から始まるため、1つ目の要素のインデックス番号は0、2つ目の要素のインデックス番号が1になる、という点に注意してください。
Rubyにおける配列の基本操作
それでは、実際にRubyにおける配列の基本操作を解説していきます。今回は、基本操作として以下の5つの操作について解説します。
- 配列の生成
- 配列の取得
- 配列の追加
- 配列の更新
- 配列の削除
配列の生成
まずは配列を生成しましょう。配列は、[]で要素を囲むことで生成することができます。
array = [] array_numbers = [1, 2, 3]
まずはこの2つの配列を生成してみます。「array」という名前の空の配列と、「array_numbers」という3つの要素が入った配列です。
作成された配列を出力してみましょう。 [] [1, 2, 3]
これで配列の生成ができました。配列の中には、数字以外にも文字列を入れたり、さらに配列を入れたりすることができます。
array_animals = ["dog", "cat", "mouse"] array_array = [1, 2, [3, 4], 5, 6]
それぞれの出力結果は、以下のようになります。
["dog", "cat", "mouse"] [1, 2, [3, 4], 5, 6]
配列の取得
配列の要素を取得するには、インデックス番号を指定します。
array = [1, 2, 3, 4, 5] puts array[0] puts array[1]
実行結果は以下の通りです。
1 2
また、負の数でインデックスを指定すると、配列の最後から位置を指定できます。
puts array[-1]
この場合は、実行結果として「5」が返ってきます。
配列の追加
配列に要素を追加する場合は、「push」メソッドまたは「<<」演算子を使用します。要素は配列の末尾に追加されていきます。
array = [1, 2, 3, 4, 5] array.push(6) puts array.inspect array << 7 puts array.inspect
それぞれの実行結果は以下のとおりです。
[1, 2, 3, 4, 5, 6] [1, 2, 3, 4, 5, 6, 7]
配列の更新
配列の要素を変更する際は、インデックス番号を指定して代入します。
array = [1, 2, 3, 4, 5] array[0] = 10 puts array.inspect
このコードでは、インデックス番号0の要素に10という値を代入しました。実行結果は以下のとおりです。
[10, 2, 3, 4, 5]
配列の削除
最後に、配列の要素を削除してみましょう。配列の要素を削除する際は、「pop」メソッドか「delete_at」メソッドを使います。
「pop」メソッドを使うと、配列の末尾の要素が削除され「delete_at」メソッドを使うと指定したインデックス番号の要素が削除されます。
array = [1, 2, 3, 4, 5] array.pop puts array.inspect array.delete_at(1) puts array.inspect
それぞれの実行結果は、以下のとおりです。
[1, 2, 3, 4] [1, 3, 4]
以上がRubyにおける配列の基本操作です。Rubyの基本中の基本なので、正確に把握しておきましょう。
Ruby配列の便利なメソッド
Rubyの配列には、様々なメソッドが用意されています。ここでは代表的なメソッドについて、使い方を簡単に解説していきます。
eachメソッド
「each」メソッドは、配列内の要素を1つずつ取り出してブロックに渡し、ブロック内で記述された処理を実行するメソッドです。以下のコードを実行してみましょう。
array = [1, 2, 3, 4, 5] array.each do |num| puts num end
このコードでは、配列「array」の各要素を取り出し、ブロック要素「num」に渡しています。「puts num」で、num内の要素を1つずつ出力しています。実行結果は以下のとおりです。
1 2 3 4 5
uniqメソッド
「uniq」メソッドは、配列の重複した要素を削除した新しい配列を返します。
array = [1, 2, 3, 2, 1, 4, 5] new_array = array.uniq puts new_array.inspect
上記のコードでは、配列「array」から重複する要素を削除し、新しい配列「new_array」を生成しています。
実行結果は以下の通りです。
[1, 2, 3, 4, 5]
selectメソッド
「select」メソッドは、ブロック内の条件に合う要素だけを集めた新しい配列を返します。実際に以下のコードをご覧ください。
array = [1, 2, 3, 4, 5] new_array = array.select do |num| num % 2 == 0 end puts new_array.inspect
上記のコードでは、ブロックの中で「num % 2 == 0」という条件を指定しています。この条件は、「2で割った余りが0である」こと、つまり偶数であることです。これにより、配列「array」から偶数だけを取り出して新しい配列「new_array」を出力しています。
[2, 4]
lengthメソッド・sizeメソッド
「lengthメソッド」と「sizeメソッド」は同じ動作をします。共に、配列の要素の数を取得します。
array = [1, 2, 3] puts array.length puts array.size
いずれも、実行結果は「3」になります。
countメソッド
「count」メソッドは、引数を指定することで、配列の中で引数と等しい要素の数を返します。引数を指定しない場合は、「length」や「size」と同じく、配列の要素の数を返します。
array = [1, 2, 2, 3] puts array.count puts array.count(2) puts array.count(4)
上記のコードの場合、実行結果は以下の通りです。
4 2 0
mapメソッド
「map」メソッドは、配列の各要素に対してブロックを実行し、ブロックの戻り値を集めた新しい配列を返します。以下のコードをご覧ください。
array = [1, 2, 3] new_array = array.map { |num| num * 2 } puts new_array
このコードでは、配列「array」の各要素の値を2倍にする処理をブロックで実行し、その結果を新しい配列「new_array」に格納しています。実行結果は以下の通りです。
[2, 4, 6]
empty?メソッド
「empty?」メソッドは、配列が空かどうかを判定します。空の場合は「true」を、そうでない場合は「false」を返します。
array = [] puts array.empty? array = [1, 2, 3] puts array.empty?
上記のコードの場合、1つ目のputsメソッドの結果としては「true」が、2つ目のputsメソッドの結果としては「false」が出力されます。
any?メソッド
「any?」メソッドは、ブロックを配列の各要素に適用し、1つ以上の要素が条件を満たす場合には「true」を、そうでない場合には「false」を返します。
array = [1, 2, 3] puts array.any? { |num| num > 2 }
上記のコードでは、ブロックで2よりも大きい数字の有無を聞いています。配列「array」には「3」があるため、上記のコードの実行結果は「true」になります。
array = [1, 2, 3] puts array.any? { |num| num > 3 }
上記のコードでは、ブロックで3よりも大きい数字の有無を聞いています。配列「array」には3よりも大きい数字はないため、上記のコードの実行結果は「false」になります。
all?メソッド
「all?」メソッドは、ブロックを配列の各要素に適用し、すべての要素が条件を満たす場合には「true」を、そうでない場合には「false」を返します。
array = [1, 2, 3] puts array.all? { |num| num > 0 }
上記のコードでは、ブロックで0よりも大きい数字の有無を聞いています。配列「array」の要素は全て0よりも大きい数字なので、上記のコードの実行結果は「true」になります。
array = [1, 2, 3] puts array.all? { |num| num > 1 }
上記のコードでは、ブロックで1よりも大きい数字の有無を聞いています。配列「array」の要素には1が含まれるため、上記のコードの実行結果は「false」になります。
include?メソッド
「include?」メソッドは、引数で指定した要素が配列に含まれているかどうかを判定します。含まれている場合は「true」を、そうでない場合は「false」を返します。
array = [1, 2, 3] puts array.include?(2)
上記のコードでは、引数で「2」が指定されています。配列「array」には2が含まれるため、上記のコードの実行結果は「true」になります。
Ruby配列の演算
Rubyでは、配列同士の演算によって新しい配列を作ることができます。ここでは、Rubyの配列の演算について、実際のコード例を使って解説します。
配列の積集合
では、2つの配列の共通の要素を取り出して新しい配列を作ります。積集合は演算子として「&」を使います。
a = [1, 2, 3] b = [2, 3, 4] c = a & b puts c
上記のコードでは、配列「a」と配列「b」の積集合として配列「c」を新しく生成しています。上記のコードの実行結果は以下の通りです。
[2, 3]
配列の和集合
和集合では、2つの配列の要素のうち、重複する要素を取り除いて新しい配列を作ります。和集合では演算子として「|」を使います。
a = [1, 2, 3] b = [2, 3, 4] c = a | b puts c
上記のコードの実行結果は、以下の通りです。
[1, 2, 3, 4]
配列の差集合
差集合では、左の配列から右の配列の要素を取り除いた新しい配列を作ります。差集合では演算子として「-」を使います。
a = [1, 2, 3] b = [2, 3, 4] c = a - b puts c
上記のコードの実行結果は、以下の通りです。
[1]
配列の要素繰り返し
要素繰り返しでは、配列の要素を繰り返して新しい配列を返します。演算子は「*」を使い、繰り返す回数を指定します。
a = [1, 2, 3] b = a * 3 puts b
上記のコードの実行結果は、以下の通りです。
[1, 2, 3, 1, 2, 3, 1, 2, 3]
配列の連結
配列を連結し、新しい配列を作ることもできます。連結する際は演算子として「+」を使います。
a = [1, 2, 3] b = [4, 5, 6] c = a + b puts c
上記のコードの実行結果は、以下の通りです。
[1, 2, 3, 4, 5, 6]
まとめ
本記事では、Rubyにおける配列の扱いについて解説してきました。配列は複数のデータの集合で、順番に割り振られたインデックス番号を使ってデータを管理できます。
Rubyの配列には多くの便利なメソッドがあるため、各メソッドの基本的な使い方や違いを把握しておく必要があります。
配列を使いこなして、Rubyスキルをさらにレベルアップさせていきましょう!
Ruby学習については、以下の記事もあわせてご覧ください。