0
0

More than 3 years have passed since last update.

Rubyの基本箇所についての復習⑤(配列)

Last updated at Posted at 2019-11-23

はじめに

前回の記事でハッシュオブジェクトについて解説しましたが、今回は似たような概念である配列についてお話します。

内容

まず復習ですが、ハッシュオブジェクトは次の様に書きます。

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]}が趣味です"

とすれば、入力した番号の人についての文章が出力されます。

0
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0