早速ですが、あなたは配列オブジェクトについて理解できていますか?
Rubyを勉強する上での一つの障壁が、図や実例がないと、テキストだけではイメージがつかみづらいということです。
この記事では主にプログラミング未経験者の方に向けて、配列オブジェクトについて図や例を用いながら簡単に説明していきます。
またRubyの配列に関連した、5つの便利なメソッドの紹介も行います。
この記事を読めば図解を通じて、10分で配列オブジェクトについて理解することができるでしょう。
出典:Ruby for Java Developers
この記事の目次
1.Rubyの配列オブジェクトとは?
配列オブジェクトは、1つの変数でたくさんの情報を持つことのできるオブジェクトです。
配列の中にはたくさんのオブジェクトを入れることができ、順番でオブジェクトを管理します。つまり、データ要素と順番がひもづけられるということです。
配列を使う際は、大きな箱をイメージしてください。この箱の中にはいろんな情報を何個でも入れることができます。
ここで、配列オブジェクトの作成をしてみましょう。
記述方法:
[オブジェクト1, オブジェクト2, …]
上記のように、括弧[]で囲んだ中にオブジェクトをカンマ(,)で区切って記述します。
括弧[]は、箱の役割をしてくれています。
配列は要素と呼ばれるものを複数持っており、1つの要素が1つのオブジェクトを管理します。
具体的には次のように記述します。
array(変数) = [1, 2, 3, 4]
4つの要素を持つ配列を作成し、各要素には引数に指定したオブジェクトが代入されます。
1-1 Ruby 配列を使うメリットとは?
たとえば変数を使って同じようなことをする場合は次のようになります。
array1 = 1 array2 = 2 array3 = 3 array4 = 4
変数では1つのオブジェクトしか管理できませんので4つの変数が必要となります。
これに対して配列では複数のオブジェクトをまとめて管理することができます。
複数の値をまとめて1つで管理できるため、コードが長くならず、記載をシンプルにすることができます。
また、配列は異なった種類のオブジェクトを指定して作成する事もできます。
array(変数) = ["オムライス", "おいしい", 900, "卵"]
配列の各要素にはどのようなオブジェクトでも代入することができ、同じ配列の要素には異なった種類のオブジェクトを代入する事もできます。
では次に配列の詳しい使い方を確認していきましょう!
2.Ruby 配列の要素について学習しよう
要素とは、配列の中のデータのことです。
要素は順番を持ち、配列に入れた順に1番目、2番目と自動的に順番が割り振られます。配列は要素を使ってオブジェクトに対する名札を管理しています。
例を見てみましょう。
array = [りんご, ぶどう, みかん, もも]
この配列は、「りんご」「ぶどう」「みかん」「もも」の4つの要素を持っています。
要素には先頭から順に番号が割り当てられています。
この番号をインデックスと呼びます。
インデックスは、「0」「1」「2」…と0から順に番号が割り当てられています。この番号を使うことで要素を指定することが出来るわけです。
では、次に特定の要素を取り出す方法を確認します。
記述方法:
配列オブジェクト[インデックス]
引数に指定したインデックスを持つ要素を取り出します。実際には次のように記述します。
array = [りんご, ぶどう, みかん, もも] puts array[0]
と記述すると”りんご, ぶどう, みかん, もも”のどれが表示されるかわかりますか?
上記の形で要素は取り出せましたね。ここでは配列オブジェクト「array」のインデックス「0」の要素は、”りんご”ということです。
2-1 Arrayクラス
Arrayクラスとは、配列オブジェクトの元になっているクラスのことです。
また、これまで作ってきた配列オブジェクトは、Arrayを省略したものと考えることができます。
2-2 配列の宣言と初期化
配列を使用する場合は、事前に宣言をする必要があります。宣言の記述方法は、2つあります。
配列の宣言の方法:
arr = Array.new arr = []
これで、簡単に配列を作ることができます。
また配列は、宣言と同時に初期化することができます。初期化することによって、可読性を効率よく上げることができるのでマスターしていきましょう。
記述方法:
変数名 = 配列オブジェクト名.new(要素の数, 要素の値)
具体的には次のように記述します。
arr = Array.new(4, "hello") puts arr => ["hello", "hello", "hello", "hello"]
配列オブジェクトの中の一番左を要素番号0番として、順に”hello”が各要素に代入されます。
2-3 配列オブジェクトを変数に代入しよう
作成された配列オブジェクトからはインデックスを指定することで指定の要素を取得することが出来ましたが、同じように要素に対して別のオブジェクトを代入することもできます。
要素に対して新しいオブジェクトを代入する場合は次のように行います。
記述方法:
配列オブジェクト[インデックス] = オブジェクト
要素に右辺のオブジェクトを代入します。
具体的には次のように記述します。
array = Array["赤", "あお", "緑"] array[1] = "青"
インデックスが「1」の要素に対して、新しいオブジェクトの「青」を代入しています。この結果、配列オブジェクトに含まれる各要素には「赤」「青」「緑」が順に代入されていることになります。
3.便利なメソッドを使いこなそう!
Rubyには便利なメソッドが無数に用意されています。
今回は、配列に関連したメソッドを5つ紹介します。
3-1 「length」メソッドと「nitems」メソッドを使ってみよう
作成された配列に含まれる要素数を取得する方法を確認します。
Arrayクラスで用意されている「length」メソッドを使います。
lengthメソッド:
配列に含まれる要素の数を返します。また「length」メソッドの別名である「size」メソッドも同じ処理をしてくれます。
記述方法:
配列オブジェクト.length
具体的には次のように記述します。
array = Array["赤", "青", "緑"] puts array.length
配列には3つの要素が含まれていますので、画面には「3」が出力されます。
また、オブジェクトが代入されていない要素(nilが代入されている要素)は除外する場合にはArrayクラスで用意されている「nitems」メソッドを使います。
nitemsメソッド:
配列に含まれる要素の数で「nil」が代入されている要素を除いた数を返すメソッド。
記述方法:
配列オブジェクト.nitems
具体的には次のように記述します。
array = Array["赤", nil, "緑"] puts array.length puts array.nitems
「length」メソッドは「3」を返しますが、「nitems」メソッドは「2」を返します。
3-2 配列を結合するメソッドを使ってみよう
複数の配列を1つの配列に結合するにはどうすれば良いのでしょうか。pushメソッドやflattenメソッドなどを利用することで1つの配列にまとめることができます。
pushメソッド:
配列の末尾に引数を要素として追加してくれるメソッドです。
配列に要素を追加する方法:
array = [1, 2, 3] array.push(10, 100) array [1, 2, 3, 10, 100]
配列に配列を追加する方法:
array1 = [1, 2, 3] array2 = [10, 100] array1.push(array2) array1 [1, 2, 3, [10, 100]]
flattenメソッド:
pushメソッドでは、配列に配列が入っている形になってしまいますね。これを解消してくれるのがflattenメソッドです。3つ以上の配列でも結合させることができます。
具体的には次のように記述します。
array1 = [1, 2, 3] array2 = [10, 100] array3 = ["a", "bb", "abc"] array1.push(array2).push(array3) # array1 = [1, 2, 3, [10, 100], ["a", "bb", "abc"]] array1.flatten! array1 [1, 2, 3, 10, 100, "a", "bb", "abc"]
flattenメソッドを使うと配列中に含まれる配列からすべて要素を取り出して、親の配列の中に並べてくれますね。
3-3 【for文 / eachメソッド】配列に対するループ処理をしてみよう
配列オブジェクトは複数の要素を持つオブジェクトです。これから配列オブジェクトに対して繰り返し処理を行う方法を確認していきます。
for文:
for文のオブジェクトに配列オブジェクトを指定すると、配列に含まれる要素を順に取り出して繰り返し処理が行われます。
記述方法:
for 変数 in 配列オブジェクト do 実行する処理1 実行する処理2 end
具体的には次のように記述します。
array = Array["赤", "青", "緑"] for color in array do puts color end
配列の含まれる要素が順に変数「color」に代入され「do」から「end」までの処理が繰り返し実行されます。
eachメソッドを使ってみよう
配列オブジェクトに対して「each」メソッドを実行すると、配列に含まれる要素を順に取り出して繰り返し処理が行われます。
記述方法:
配列オブジェクト.each{|変数|
実行する処理1
実行する処理2
}
具体的には次のように記述します。
array = Array["赤", "青", "緑"] array.each do |color| puts color end
配列の含まれる要素が順に変数「color」に代入され、「赤, 青, 緑」と順番に出力されます。
「color」というブロックパラメータに「赤」「青」「緑」と、配列の要素が代入されるイメージです。
複数の要素を持つ配列も上記のようなメソッドを使用することで簡潔に記述できますね!
Rubyでは上記2つ以外にも繰り返し処理をしてくれる文法があるので、気になる方は下記のサイトを参考にしてみてください。
この記事のハッシュタグ
4.【二次元配列】要素に別の配列オブジェクトを代入しよう
配列オブジェクトの要素には任意のオブジェクトを代入できるので、他の配列オブジェクトも代入することができます。
配列オブジェクトの中に別の配列オブジェクトが存在していることを二次元配列と言います。
例として果物と値段の配列を作成してみます。
fruits = [[“いちご”, 250], [“みかん”, 50], [“もも”, 120]]
配列には3つの要素が含まれており、それぞれ「[“いちご”, 250]」、「[“みかん”, 50]」、「[“もも”, 120]」の配列オブジェクトが代入されています。各要素を取り出してみます。
fruits = [["いちご", 250], ["みかん", 50], ["もも", 120]] fruit1 =fruit[0] fruit2 =fruit[1] fruit3 =fruit[2]
取り出した各要素は配列オブジェクトです。その為、さらに要素を取り出すことができます。
fruits = [["いちご", 250], ["みかん", 50], ["もも", 120]] fruit1 =fruit[0] name1 =fruit1[0] price1 =fruit1[1] fruit2 =fruit[1] name2 =fruit2[0] price2 =fruit2[1] fruit3 =fruit[2] name3 =fruit3[0] price3 =fruit3[1]
丁寧にかけば上記のようになりますが、次のように記述することもできます。
fruits = [["いちご", 250], ["みかん", 50], ["もも", 120]] name1 = fruits[0][0] price1 = fruits[0][1] name2 =fruits[1][0] price2 =fruits[1][1] name3 =fruits[2][0] price3 =fruits[2][1]
このように配列の要素に他の配列オブジェクトを代入することができます。
5.最後に
このように、配列オブジェクトが理解できれば、複数の情報を簡単に管理することができます。
他にも複数の情報を管理してくれるメソッドにハッシュがあります。
ハッシュは、配列と違いキーとバリューを使って情報の管理を行っています。
詳しく知りたい方はぜひ配列と比較しながら学習してみてください!
この記事を読んで、少しでも配列オブジェクトへの理解を深め、
Rubyを勉強しているあなたの今後の学習の足掛かりになれば幸いです。
Rubyの学習が進んだら、次はRuby環境で利用できる代表的なフレームワークであるRuby on Railsを学び、WEBアプリケーション開発に挑戦してみてください。
Ruby on Railsのスキルを身に付けることで、cookpadやWantedlyのような動的なWEBアプリケーションを作成することができます。
配列オブジェクトをマスターしてプログラミング学習を楽しく行っていきましょう!
はじめての転職、何から始めればいいか分からないなら
「そろそろ転職したいけれど、失敗はしたくない……」そんな方へ、テックキャンプでは読むだけでIT転職が有利になる限定資料を無料プレゼント中!
例えばこのような疑問はありませんか。
・未経験OKの求人へ応募するのは危ない?
・IT業界転職における“35歳限界説”は本当?
・手に職をつけて収入を安定させられる職種は?
資料では、転職でよくある疑問について丁寧に解説します。IT業界だけでなく、転職を考えている全ての方におすすめです。
「自分がIT業界に向いているかどうか」など、IT転職に興味がある方は無料カウンセリングにもお気軽にお申し込みください。