##配列
複数の値をまとめて管理するには、配列というものを用います。
配列は、[値1, 値2, 値3]のように作ります。配列に入っているそれぞれの値のことを要素と呼びます。
例)
["Takayama","Yukihiro","Takayuki"]
[21,43,12]
###配列を変数に代入する
配列も1つの値なので、変数に代入することができます。
配列を代入する変数名は慣習上、複数形にすることが多いです。
例)
names = ["Takayama","Yukihiro","Takayuki"]
puts names
出力結果
Takayama
Yukihiro
Takayuki
###インデックス番号
配列の要素には、前から順に「0, 1, 2, ...」と数字が割り振られています。これをインデックス番号といいます。
インデックス番号
["Takayama","Yukihiro","Takayuki"]
0 1 2
配列の各要素は、配列[インデックス番号]とすることで用いることができます。
例)
names = ["Takayama","Yukihiro","Takayuki"]
puts names[1]
出力結果
Takayama
このように、names[1]とすると、配列namesの2つ目の要素の値を用いることができます。
##繰り返し処理(each文)
繰り返し処理には、each文というものを使います。
each文を使うと、配列の要素を順番に取り出して処理を行うことができます。
配列.each do |変数名|
処理
end
each文は、このように、「配列.each do |変数名|」と書き、「end」までの間に実行したい処理を書きます。
例)
names = ["Takayama","Yukihiro","Takayuki"]
names.each do |name|
puts name
end
出力結果
Takayama
Yukihiro
Takayuki
each文は配列の要素の数だけ繰り返し処理を行います。
配列の要素が1つずつ変数に代入され、each文の中の処理が実行される、というイメージです。
each文内の変数名(name)は好きな名前をつけられますが、配列の変数名(names)の単数形にすることが慣習上多いです。
each文で各要素が1つずつ代入される|変数|は、each文の中、つまりeach文のdoからendまでの間でしか使用することはできません。
##ハッシュ
複数の値をまとめて管理する方法のひとつ。
配列は複数の値を並べて管理するのに対して、ハッシュはそれぞれの値にキーと呼ばれる名前をつけて管理します。
ハッシュ
{キー1 => 値1,キー2 => 値2}
ハッシュは、このようにつくります。
配列は要素を[]で囲みましたが、ハッシュは{}で囲みます。キーと値の間は「=>」でつなぎます。また、配列と同様に、要素と要素はコンマ(,)で区切ります。
###ハッシュを変数に代入する
ハッシュも1つの値なので、配列と同様に、変数に代入することができます。
例)
user = {"name" => "Yukihiro","age" => 25}
puts user
出力結果
{"name" => "Yukihiro","age" => 25}
###ハッシュの要素を用いる
ハッシュの各要素の値は、対応するキーを使って、ハッシュ[キー]とすることで用いることができます。
例)
user = {"name" => "Yukihiro","age" => 25}
puts user["name"]
出力結果
Yukihiro
このように、user["name"]とすると、ハッシュuserのキー「"name"」と対応している値を用いることができます。
###ハッシュの要素を更新する
ハッシュ[キー] = 値と書くことで、キーと対応している値を更新することができます。
例)
user = {"name" => "Yukihiro","age" => 25}
puts user
user["age"] = 26
puts user
出力結果
{"name" => "Yukihiro","age" => 25}
{"name" => "Yukihiro","age" => 26}
###ハッシュに要素を追加する
ハッシュ[新しいキー] = 値と書くことで、ハッシュに新しい要素を追加することができます。ただし、ハッシュにすでにあるキーを指定すると、要素の追加ではなく更新になってしまうので注意が必要。
例)
user = {"name" => "Yukihiro","age" => 25}
puts user
user["gender"] = "male"
puts user
出力結果
{"name" => "Yukihiro","age" => 25}
{"name" => "Yukihiro","age" => 26,"gender" => "male"}
###シンボル
シンボルとは、文字を「"」や「'」で囲む代わりに、先頭に「:」をつけた書き方のことをいいます。
{"name" => "Yukihiro","age" => 25}
シンボルを用いた場合
{:name => "Yukihiro",:age => 25}
シンボルは、ハッシュのキーとしてよく使われます。
ハッシュのキーの部分を「:name」という様に、シンボルを用いた場合には、その値を用いる時も「user[:name]」とシンボルで指定する必要があります
例)
user = {:name => "Yukihiro",:age => 25}
puts user[:name]
出力結果
Yukihiro
ハッシュのキーにシンボルを用いるときには、「:key =>」を「key:」というように省略した書き方をすることができます。
例)
{:name => "Yukihiro",:age => 25}
#省略した書き方
{name: "Yukihiro",age: 25}
省略した書き方の場合でも、あくまでキーはシンボルですので、要素を取得する場合には先ほどのようにシンボルを用いる必要があります。
###nil
nilとは、ハッシュから存在しないキーの値を取り出した時の「何もない」という値のことをRubyでは「nil」という特別な値で表現されます。
user = {name: "Yukihiro",age: 25}
puts user[:weight] #[:weight]というキーは存在しないので、user[:weight]はnil
出力結果
###ifとnil
ifの条件には、真偽値(trueとfalse)以外も使うことができます。Rubyでは、ifの条件に真偽値以外を用いたとき、それがnilであればfalseとして扱われ、それ以外はtrueとして扱われます。
「if ハッシュ[キー]」とすることで、値がない場合、すなわちnilの場合はfalseとして扱われます。
user = {name: "Yukihiro"}
if user[:age]
puts"#{user[:name]}さんは#{user[:age]}歳です"
else
puts"#{user[:name]}さんの年齢は秘密です"
end
出力結果
Yukihiroさんの年齢は秘密です
このように、ifの条件に「nil」が入るので、else側の処理が実行されます。
###配列の要素にハッシュを入れる
配列の要素には、文字列や数値だけでなく、ハッシュも使うことができます。
例)
user = [
{name: "Yukihiro",age: 25},
{name: "Takayama",age: 24}
]
####配列の要素を確認する
配列の値がハッシュなので、配列[インデックス番号]で対応するハッシュを用いることができます。
例)
users = [
{name: "Yukihiro",age: 25},
{name: "Takayama",age: 24}
]
puts users[0]
出力結果
{:name =>"Yukihiro",:age => 25}
####配列の中のハッシュ
そのハッシュを代入した変数をつかって、変数[キー]とすることでハッシュの要素の値を用いることができます。
例)
users = [
{name: "Yukihiro",age: 25},
{name: "Takayama",age: 24}
]
user = users[1]
puts user[:name]
出力結果
Takayama
####ハッシュの値を確認する
先ほどのハッシュの要素の値の扱い方は、さらに省略することができます。
配列[インデックス番号][キー]で、特定のハッシュの値を用いることができます。
例)
users = [
{name: "Yukihiro",age: 25},
{name: "Takayama",age: 24}
]
puts users[1][:name]
出力結果
Takayama
####eachを使う
先ほどの、ハッシュが値の配列をeachを使ってやってみます。
例)
users = [
{name: "Yukihiro",age: 25},
{name: "Takayama",age: 24}
]
users.each do |user|
puts user
end
出力結果
{:name => "Yukihiro",:age => 25},
{:name => "Takayama",:age =>24}
####eachの中でハッシュの値を使う
|変数|であるuserにはハッシュが代入されているので、user[キー]とすることで、ハッシュの中の値を使うことができています。
例)
users = [
{name: "Yukihiro",age: 25},
{name: "Takayama",age: 24}
]
users.each do |user|
puts user[:name]
end
出力結果
Yukihiro
Takayama