Ruby on RailsなどのRubyを使うプログラマーなら、配列を定義するArrayクラスを使いこなせなければなりません。特に繰り返し処理と配列は相性が良いことから、配列を考えることはRubyのプログラミングの基本とも言えます。今回は、RubyのArrayクラスを使った繰り返し処理の作り方について解説します。
Rubyにおける配列の基本
システム構築のためのプログラミングでは、頻繁に配列が使われます。Rubyも例外ではありません。まずは、Rubyにおける配列の基本について解説します。
そもそもプログラム言語における配列とは連続した変数
プログラミングにおける配列とは、データを格納する変数の一種で、連続した複数の変数をまとめて扱うことも、個々の変数を個別に扱うこともできます。多くのプログラミング言語で配列をサポートしており、もちろんRubyでも利用できます。
また、プログラムでは、繰り返し処理がよく使われており、配列は繰り返し処理と相性が良いことから、実際のプログラムでよく使われる変数です。
なお、配列の基本形は、変数名[数字]であり、変数名だけでも扱えるうえ、[数字]を使って個別に使用することも可能です。さらに、[]内の数字の代わりに文字を使用するケースもあり、Ruby on Railsなどのフレームワークでよく使われています。
Ruby で配列を定義する方法
Rubyは、変数を明示的に宣言しなくても使用できます。しかし、配列は、宣言しなければ使えません。なお、Rubyで配列を宣言する基本は、[]を用いて初期化する、または、Arrayクラスを用いた配列の宣言です。
具体的は、次のとおりです。
#配列リテラルによる初期化
values = []
#例:空の配列を作る values = [] #例:データを定義した配列を定義する values = [ "apple", "orange", "banana", "grape" ]
なお、[]の代わりに{}を使っても定義できます。
#例:データを定義した配列を定義する values = { "apple", "orange", "banana", "grape" }
#Arrayクラスを用いた初期化
vakues = Array.new()
#例:空の配列を作る values = Array.new() #例:既存の配列arrsのコピーを作る values = Array.new(arrs)
配列はまとめても個別でも扱える
Array(配列)は、複数のデータをまとめて扱えるうえ、個々のデータも参照できるので、プログラムではよく使われる機能の一つです。さらにRubyでは、Array(配列)に適用するメソッドが用意されているので、それを使ってプログラムを作ります。
#配列を使った例 arrs = [ 100, 200, 300 ] b = arrs #配列をまとめてコピー print b[0] #配列の要素の1つだけ表示 #100
さらに、配列には、メソッドと組み合わせることで、配列の数を数えたり、ソートして順番を変えることも可能です。例えば、arrsというArray(配列)の個数を参照する場合は、lengthメソッドを使い、arrs.lenth として次の例のように使います。
#配列のlengthメソッドを使った例 arrs = [ 100, 200, 300 ] text = "配列の個数は" + arrs.length.to_s + "個です。\n" print text
他にも便利なメソッドがたくさんあるので、ぜひ、使ってください。また、Rubyのおける配列の使い方の基本を紹介した下記の記事も参考にしましょう。
Array(配列)を使った繰り返し処理の作り方
次から、Rubyのプログラムでよく使われる、Arrayクラスの配列を使った繰り返し処理の作り方について解説します。
Array(配列)の有無をチェックする方法
Rubyプログラムに限らず、前の処理で配列に値を代入している前提で、プログラムを書いたものの、実は前の処理では条件に合わずに、配列が空だったというケースはよくあります。そのような場合は、事前に配列に値が入っているかどうかをチェックしましょう。
なお、Rubyには、Array(配列)が空であるかをチェックするempty?メソッドが用意されています。配列に対して繰り返し処理など何かする前に、配列に値があるかをチェックして、空だったら別の処理を用意してするのが賢いプログラムの作り方です。
Array(配列)の有無の書き方の例 if arr.empty? then /* 配列が空だった場合の処理 */ else /* 配列に値がある場合の処理 */ end
eachメソッドを使った繰り返しの書き方
RubyでArray(配列)を使った繰り返し処理を作るのによく使われるのがeachメソッドです。なお、eachメソッドは、配列の先頭から最後まで順に変数に取り出して、繰り返し処理を記述する機能です。
繰り返し処理の使い方
配列名.each { |変数|
実行する処理
}
Array(配列)arrsを使った繰り返しの例 arrs = [ 10, 70, 130, 190, 250 ] answer = 0 arrs.each { |value| if value < 100 then answer += 100 else answer += value end } p answer # 770
なお、配列の全ての値を計算して新しい配列を作ったり、条件に一致する値で新しい配列を作る場合は、mapメソッドやfilterメソッドなどでもっと簡単に書けます。そのため、なんでもeachメソッドを使うのではなく、必要に応じて適したメソッドを使いましょう。
eachメソッドの使い方は、下記の記事でも詳しく解説しているので、参照してください。
【Ruby入門】eachメソッドの使い方と応用例
index番号を使ったプログラムの書き方
Array(配列)に格納されたデータを参照する場合、通常はindex番号で参照します。そして、先ほど紹介したeachメソッドを使った繰り返し処理でも、index番号を利用できます。なお、index番号を利用するには、each_with_indexメソッドを使います。
index番号を使った繰り返し処理の使い方
配列名.each_with_index { |変数, index変数|
実行する処理
}
index番号を使った繰り返しの例 arrs = [ 10, 70, 130, 190, 250 ] answer = 0 arrs.each_with_index { |value, index| if index > 1 then answer += value end } p answer # 570
具体的なArray(配列)の作り方
実際のRubyのプログラムでは、配列を宣言して使うケースは少なく、先ほど解説した繰り返し処理などで配列を作り、後の処理でそれを使うのが一般的です。そこで次から、プログラムの中でよく使われるArrayクラスを用いた配列の作り方をご紹介します。
Array(配列)をコピーする
プログラムの中では、基になる配列をコピーして新しい配列を作り、そのデータを加工するケースがあります。しかし、Arrayクラスで定義されている配列は、一般的な変数と同じ書き方によるコピーはできません。例えば、aという配列をbという配列にコピーする場合、「a = b」では、bというaの配列の別名を付けることになるので注意してください。
RubyでArray(配列)のコピーを作る場合は、次の方法を用います。
a = Array[1, 2, 3, 4] b = a.dup
また、arrayメソッドを用いて、次のように記述することも可能です。
a = Array[1, 2, 3, 4] b = Array.new(a)
この書き方は、あえてArrayを使うことで、後でプログラムを見直す際、この変数が配列だと分かりやすくなります。
条件に合うデータだけでArray(配列)を作る
配列に接続するメソッドはたくさんあり、その中には配列内のデータを加工したり、条件に合うデータを抽出も可能です。これらのメソッドは、繰り返し処理を作らなくても使えるので、Rubyらしいプログラムを作るのに最適です。
なお、配列のデータを加工して、元の配列と同じ数の配列を作るには、mapメソッドを使います。次の例は、配列arrに格納された数値データを、全て文字列に変換した新しい配列bを作成するコードです。
#mapメソッドの例 arr = Array[1, 2, 3, 4] b = arr.map(&:to_s) # ["1", "2", "3", "4"]
また、条件に合うデータを抽出する処理は、selectメソッドを使います。次の例は、配列arrに格納された数値データの中から、10より大きいデータをんで新しい配列bを作成するコードです。
#selectメソッドの例 arr = Array[2, 3, 5, 7, 11, 13, 17, 19] b = arr.select(|item| item > 10 ) # [11, 13, 17, 19]
Array(配列)の応用例
Ruby on Railなどを利用し、実際のWebシステムを作ろうと思ったら、配列は欠かせません。次からは、Rubyの実際のWebシステムでも使われる配列の応用例を紹介します。
連想配列(ハッシュ)を使う
今のWebシステムはフレームワークをよく利用しますが、そういったフレームワークでは、データベースのフィールド名をそのままプログラム中の変数名として使うと便利です。そして、そういったプログラムでフィールド名を使うとすれば、連想配列(ハッシュ)を利用します。
Rubyでは、配列の識別に数字ではなく、文字を使うことが可能で、そういった配列を連想配列(ハッシュ)と言います。なお、配列を宣言する場合は[]で囲みますが、連想配列(ハッシュ)は{}で囲むなど、似ていますが扱い方が違うので注意してください。
具体的には、次のように記述します。
#連想配列(ハッシュ)の例 arr = Array( "name" => "ruby", "version" => "2.6.3", "type" => "script", "attr" => "stable" ) print(arr["name"]) # ruby
上の書き方は「=>」を使っていましたが、「:」を使った別の書き方もあります。
#連想配列(ハッシュ)の例 arr = Array( name: "ruby", version: "2.6.3", type: "script", attr: "stable" ) print(arr[:version]) # 2.6.3
2次元配列を使う
プログラムで扱うデータを表形式で考えると解りやすいケースがありますが、そのようなプログラムで活用されるのが2次元配列です。なお、2次元配列に格納したデータは、繰り返し処理を2重に組み合わせることで参照でき、そのデータによっていろいろな処理を作ることが可能です。
#2次元配列の例 arrs = [ [ "RT101", "RT", "126.0.0.1", 1 ], [ "AP101", "AP", "126.0.0.2", 0 ], [ "AP102", "AP", "126.0.0.3", 0 ] ] arrs.each { |item| if item[1] == "AP" then print(item[0], ", ", item[2], "\n") end } # AP101, 126.0.0.2 # AP102, 126.0.0.3
まとめ
Rubuに限らず、プログラムでは繰り返し処理がいろいろな場面で使われ、その中では必ずのように配列が使われています。そのため、配列の使い方は、プログラムスキルの基本とも言えます。
Ruby on Railなど、Rubyでシステム開発をやるのなら、今回紹介したArrayクラスの使い方など、配列を使った繰り返し処理の作り方をマスターしましょう。