2 flat logo on transparent 256
2018-04-12

初心者・独学者向け|Rubyの配列処理の入門とよく使うメソッド

Programming2131231lj

初心者・独学者向けにプログラミング言語:Rubyの配列について解説をします。

Rubyだけでなく、様々なプログラミング言語で配列はよく利用されます。例えば、配列内に個人情報や地域の情報 など様々な情報が格納され、それの配列から情報を取り出したり追加するなどです。

その為配列の操作は是非学んでおいてください。

なおコードの実行例はirbで実行しているので、.rbファイルで 実行した場合は、ターミナル上で返り値が改行されるなど 結果の見え方が若干変わります。

そもそも配列とは

配列は要素を[ ]カッコで囲んで、複数の要素を格納する事ができます。

中の要素は、数字や文字列など関係なく、異る型の要素を格納することができます。

a= ["東京",12,"福岡"]
=> ["東京", 12, "福岡"]

※文字列は""ダブルクオートかシングルクオートで囲います。 下記のように文字列を囲まなければエラーになります。

b = [l]

NameError: undefined local variable or method `l' for main:Object
    from (irb):10
    from /Users/smt/.rbenv/versions/2.1.4/bin/irb:11:in `<main>'

厳密にいうとRubyの配列はArryクラスにインスタンスとして生成され、配列を生成するには配列リテラルの[]を利用します。 初心者・独学者の場合は中々理解しきれないと思いますが、 そういうものだという認識で結構です。

pushメソッドでRubyの配列に値を挿入する

pushメソッドは配列の末尾に引数を要素として追加できます。

a= ["東京","福岡"]
=> ["東京", "福岡"]
a.push("大阪")
=> ["東京", "福岡", "大阪"]

なお<<演算子メソッドでも追加可能です

a= ["東京","福岡"]
=> ["東京", "福岡"]
a.<< ("大阪")
=> ["東京", "福岡", "大阪"]

popメソッドで配列内の末尾の要素を削除する

.popでは末尾の要素を削除する事ができます。

a= ["東京", "福岡", "大阪"]
=>  ["東京", "福岡", "大阪"]
a.pop
=> ["大阪"]

map(.collect)で要素へ繰り返し処理を行う

.map(.collect)メソッドで配列内の要素数だけ繰り返し処理を実行できます。

["PYTHON", "RUBY", "JAVA"].map {|text| text.downcase }
=> ["python", "ruby", "java"]

["PYTHON", "RUBY", "JAVA"].collect {|text| text.downcase }
=> ["python", "ruby", "java"]

配列内の要素の数を数える。

.countメソッドを利用すれば配列内の要素の数を返してくれます。

name = ["田中","鈴木","Tomy"]
=> ["田中", "鈴木", "Tomy"]
irb(main):020:0> name.count
=> 3

count以外にも.lengthや.sizeでも同じように要素内の数をカウントできます。

empty?で配列が空か確認する

.empty?で配列が空かを確認できます。

 a= ["東京", "福岡", "大阪"]
=> ["東京", "福岡", "大阪"]
a.empty?
=> false

b = []
=> []
b.empty?
=> true

実務例として、.empty?で配列内のユーザーや値が空か空ではないかで処理を変更する事があります。

配列から値を取り出す

引数に取り出したい値の、配列内の位置を指定すれば 配列から値を取得できます。

a = ["東京", "福岡", "大阪"]
=> ["東京", "福岡", "大阪"]
a[0]
=> "東京"

上記のa[0]に注目してください。 Rubyのルールで配列内の、要素の順番は0からカウントされます。

その為、配列内の"東京"は一番始めに格納されているので 0を指定する必要があります。

transposeメソッドで配列の行列を入れ替える

各配列の要素数が一致しない場合は、indexエラーとなります。

test =  [["東京", "福岡", "大阪"],["新潟","さいたま","鹿児島"]]
=> [["東京", "福岡", "大阪"],["新潟","さいたま","鹿児島"]]
test.transpose
=> [["東京", "新潟"], ["福岡", "さいたま"], ["大阪", "鹿児島"]]

compactメソッドで配列のnill要素を削除する

text = [nil, "java", nil, nil, "python"]
=> [nil, "java", nil, nil, "python"]
text.compact
=> ["java", "python"]

uniqメソッドで配列内の重複要素を削除する

array = [1, 2, 3, 1, 2, 4, "ruby","python","ruby"]
=> [1, 2, 3, 1, 2, 4, "ruby", "python", "ruby"]
array.uniq
=> [1, 2, 3, 4, "ruby", "python"]

zipメソッドで配列内の重複要素を削除する

. zipメソッドは2つの配列を組み合わせて、2次元配列を作成します。

transposeメソッドとの違いは足りない要素はnilで返されます。

 text = ["ruby", "python", "java"]
=> ["ruby", "python", "java"]
num = [1, 2, 3]
=> [1, 2, 3]
text.zip(num)
=> [["ruby", 1], ["python", 2], ["java", 3]]

productメソッドで総当たりの組み合わせの配列を生成する

引数に設定された配列へ配列を代入し、2次元配列で返します

text1 = ["フルーツ"]
=> ["フルーツ"]
text2 = ["りんご", "みかん", "バナナ"]
=> ["りんご", "みかん", "バナナ"]
sets = text1.product(text2)
=> [["フルーツ", "りんご"], ["フルーツ", "みかん"], ["フルーツ", "バナナ"]]

takeメソッドで先頭からn個の要素を取得し、新しい配列を作成して返します。

array = ["足立区","港区","豊島区","江東区"]
=> ["足立区", "港区", "豊島区", "江東区"]
array.take(2)
=> ["足立区", "港区"]

以上 その他プログラミング言語では配列の他にHashもよく利用されます。

Rubyに関するHashの記事は下記をご参照下さい

関連記事

初心者・独学者向け|Rubyのハッシュ入門とよく使うメソッド

初心者・独学者向け|RubyのStringクラスとよく使うメソッド

Ruby技術者認定試験 (Silver version 2.1)対策 | !が付かない破壊的メソッド

Rubyの資格試験|Ruby技術者認定試験 (Silver version 2.1)の解説と対策概要

初心者・独学者向け|Rubyのinitializeメソッドとは

Rubyの繰り返し処理の解説|初心者・独学者向け

前の記事
次の記事