ローイングファンのプログラミング日記

ボート競技やプログラミングについて書きます

配列を使って情報をまとめる

前回はオブジェクトを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