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

初心者・独学者向けにプログラミング言語:Rubyの配列について解説をします。
Rubyだけでなく、様々なプログラミング言語で配列はよく利用されます。
例えば、配列内に個人情報や地域の情報 など様々な情報が格納され、それの配列から情報を取り出したり追加するなどです。
その為配列の操作は必ず学んでおいてください。
Railsだろうが、他のプログラミング言語だろうが必ず使われます。
なおコードの実行例はirbで実行しているので、.rbファイルで 実行した場合は、ターミナル上で返り値が改行されるなど 結果の見え方が若干変わります。
関連練習問題は以下
Rubyの練習問題:配列編|初心者・独学者向け入門コンテンツ
Rubyの練習問題:文字列編|初心者・独学者向け入門コンテンツ
paiza(パイザ)Cランク練習問題|5以上の整数の合計のRubyサンプルコードと解説
paiza(パイザ)Cランク練習問題|検索履歴のRubyサンプルコードと解説
paiza(パイザ)Cランク練習問題|宝くじのRubyサンプルコードと解説
そもそも配列とは
配列は要素を[ ]カッコで囲んで、複数の要素を格納する事ができます。
中の要素は、数字や文字列など関係なく、異る型の要素を格納することができます。
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クラスにインスタンスとして生成され、配列を生成するには配列リテラルの[]を利用します。 初心者・独学者の場合は中々理解しきれないと思いますが、 そういうものだという認識で結構です。
Rubyで配列処理をするメソッド例
pushメソッドでRubyの配列に値を挿入する
pushメソッドは配列の末尾に引数を要素として追加できます。
a= ["東京","福岡"] => ["東京", "福岡"] a.push("大阪") => ["東京", "福岡", "大阪"]
なお<<演算子メソッドでも追加可能です
a= ["東京","福岡"] => ["東京", "福岡"] a.<< ("大阪") => ["東京", "福岡", "大阪"]
popメソッドで配列内の末尾の要素を削除する
.popでは末尾の要素を削除する事ができます。
a= ["東京", "福岡", "大阪"] => ["東京", "福岡", "大阪"] a.pop => ["大阪"]
関連記事
paiza(パイザ)Cランク練習問題|野球の審判のRubyサンプルコードと解説
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) => ["足立区", "港区"]
group_byメソッドで要素をグループ化しHashで返す
group_byメソッドは重複した要素は Hashの要素へ重複分追加され、
重複していない要素は、Hashのkeyと要素が同じ値になります。
categories=["programming","php","python","ruby","python","programming"] categories.group_by {|v|v} => {"programming"=>["programming", "programming"], "php"=>["php"], "python"=>["python", "python"], "ruby"=>["ruby"]}
以上 その他プログラミング言語では配列の他にHashもよく利用されます。
Rubyに関するHashの記事は下記をご参照下さい
関連記事
初心者・独学者向け|Rubyのハッシュ入門とよく使うメソッド
初心者・独学者向け|RubyのStringクラスとよく使うメソッド
Ruby技術者認定試験 (Silver version 2.1)対策 | !が付かない破壊的メソッド
Rubyの資格試験|Ruby技術者認定試験 (Silver version 2.1)の解説と対策概要