配列を使って情報をまとめる
前回はオブジェクトを1つずつ変数に代入した。
今回はオブジェクトをまとめて扱うときに便利な配列(Array)を試す。
目次
Rubyリファレンスマニュアル Arrayクラス
配列に関するリファレンスマニュアルは以下。
Rubyリファレンスマニュアル Arrayクラス
https://docs.ruby-lang.org/ja/latest/class/Array.html
配列をつくる
配列はオブジェクトの収納ボックス。コンテナ。
書式は次のとおり。
[ オブジェクト, オブジェクト ]
オブジェクトを[ ]
で囲むと配列クラス(Array class)に属する配列オブジェクトになる。
配列に格納されたオブジェクトのことを要素(Element)と言う。
複数の要素を格納する場合は要素間を,(カンマ)で区切る。
オブジェクトは1つでもかまわないし、なくても(空でも)エラーにならない。
配列のコードを書く
実際にコードを書く。
test.rb
["Aボートクラブ","Bローイングクラブ","C大学","D大学"]
これで4つの文字列オブジェクトが格納された、4つの要素をもつ配列オブジェクトになる。
ただし上の場合はメソッドがないので動作はない。
配列のインデックス
配列内の要素には自動でインデックスがつく。
左から0, 1, 2, 3 ...と順番に数字がつく。
インデックスの書式は次のとおり。
配列オブジェクト[インデックス]
インデックスを使って要素を格納したり取り出したりできる。
試しに要素を取り出すコードを書く。
test.rb
#配列オブジェクトをつくって変数crewsに代入する crews = ["Aボートクラブ","Bローイングクラブ","C大学","D大学"] #1番左の要素を表示する puts crews[0] #左から4つ目の要素を表示する puts crews[3]
実行結果
Aボートクラブ D大学
次にオブジェクトを配列に格納するコードを書く。
左から5番目に要素を追加してみる。
test.rb
crews = ["Aボートクラブ","Bローイングクラブ","C大学","D大学"] crews[4] = "E生命" p crews #pメソッドはオブジェクトの詳細をターミナル/PowerShellに表示してくれるメソッド
実行結果
["Aボートクラブ", "Bローイングクラブ", "C大学", "D大学", "E生命"]
pメソッドのリファレンスマニュアル
Rubyリファレンスマニュアル
Kernelモジュール モジュール関数p
https://docs.ruby-lang.org/ja/latest/class/Kernel.html#M_P
次に左から2番目の要素を新しいものと入れ替える。
test.rb
crews = ["Aボートクラブ","Bローイングクラブ","C大学","D大学"] #インデックス4の位置にオブジェクトを追加 crews[4] = "E生命" #インデックス1の位置のオブジェクトを変更 crews[1] = "Bローイング倶楽部" p crews
実行結果
["A会社", "Bローイング倶楽部", "C大学", "D大学","E生命"]
配列への追加や変更は=
を使う。
指定したインデックスに要素がない場合は追加される。
指定したインデックスに要素がある場合は変更される。
配列から要素を取りだしてターミナル/PowerShellに出力する
配列を使ってボートレース(レガッタ)の結果を出力する。
rubylesson.rb
#レース情報を変数に代入する month_day_time = "10/29 12:10" event = "男子ダブルスカル" group = "決勝" #着順毎にレース結果を配列に格納する #つくった配列を変数に代入する rank1st = [1,"I会社","06:29.24"] rank2nd = [2,"S会社","06:30.62"] rank3rd = [3,"K電力","06:36.01"] rank4th = [4,"M生命","07:13.70"] #ターミナルに出力させる puts month_day_time #日時の出力 puts event + group #種目と組別の出力 puts "#{rank1st[0]}着 #{rank1st[1]} #{rank1st[2]}" #式展開を使って1着の結果を出力 puts "#{rank2nd[0]}着 #{rank2nd[1]} #{rank2nd[2]}" #2着の結果を出力 puts "#{rank3rd[0]}着 #{rank3rd[1]} #{rank3rd[2]}" #3着の結果を出力 puts "#{rank4th[0]}着 #{rank4th[1]} #{rank4th[2]}" #4着の結果を出力
実行結果
10/29 12:10 男子ダブルスカル決勝 1着 I会社 06:29.24 2着 S会社 06:30.62 3着 K電力 06:36.01 4着 M生命 07:13.70
インデックスを使って配列の要素が取りだせている。
インデックスを使った式を式展開で文字列として扱えている。
今回の動作確認環境
Ruby 2.4.3p205
macOS 10.13.3
ターミナル
Windows10
Windows PowerShell