はじめに
前回の記事でハッシュオブジェクトについて解説しましたが、今回は似たような概念である配列についてお話します。
内容
まず復習ですが、ハッシュオブジェクトは次の様に書きます。
member1 = {name: "田中", age: 20, hoby: "読書"}
member2 = {name: "佐藤", age: 25, hoby: "スポーツ"}
member3 = {name: "鈴木", age: 30, hoby: "料理"}
ここで例えば「田中さんは20歳で読書が趣味です」と出力したい場合は、
puts "#{member1[:name]}さんは#{member1[:age]}歳で#{member1[:hoby]}が趣味です"
とすれば良かったのでした。
今の書き方だと、例えばmember100まで定義した場合に、コードが煩雑になる恐れがあります。
そこで配列を使って複数あるハッシュオブジェクトを1つにまとめてしまいたいと思います。
まとめ方は色々ありますが、主だったものは次の通りです。
members = []
member = {name: "田中", age: 20, hoby: "読書"}
members << member
member = {name: "佐藤", age: 25, hoby: "スポーツ"}
members << member
member = {name: "鈴木", age: 30, hoby: "料理"}
members << member
members << member
というのは、配列membersに要素memberを追加する、という意味になります。
たとえば、
members = []
members << tanaka
members << satou
members << suzuki
という処理を行った場合、members
の中身は
[tanaka, satou, suzuki]
となります。左から順に入っていくわけです。
配列の要素には番号が割り振られていますが、1からではなく0から始まります。
なので、番号を指定する場合は、左からa番目の場合はa-1を指定しなければいけません。
この書き方ならば、gets.chomp
を使って入力する時に便利です。
また、ハッシュオブジェクトを代入しておく変数をmember1,member2,member3,…
という風に複数用意する必要がない(memberに毎回上書きしていく)ので、
変数名を複数用意する必要がありません。
このように配列を利用すれば、前述の「田中さんは20歳で読書が趣味です」という文章は次の様にすれば出力できます。
puts "#{members[0][:name]}さんは#{members[0][:age]}歳で#{members[0][:hoby]}が趣味です"
members[0]
が配列membersの0番目の要素、つまり一番最初にある田中さんの要素を意味しています。
この0の部分は直接数字を書き込むだけではなく、変数を記述することができます。
例えば
num = 0
puts "#{members[num][:name]}さんは#{members[num][:age]}歳で#{members[num][:hoby]}が趣味です"
とすれば、putsの本文中のnumが0として扱われるので、前述と同じ文章が出力されます。
この手法は前述したようにgets.chomp
と相性がよく、
puts "何番の人のことが知りたいですか?"
num = gets.chomp.to_i
puts "#{members[num][:name]}さんは#{members[num][:age]}歳で#{members[num][:hoby]}が趣味です"
とすれば、入力した番号の人についての文章が出力されます。