繰り返し処理について(Ruby)
配列について
- 複数の値をまとめて管理するには、配列というものを用います。
配列は、[値1, 値2, 値3]のように作ります。配列に入っているそれぞれの値のことを要素と呼びます。
配列を使うと、複数の文字列や数値をまとめて書くことができます。
#文字列がはいった配列
["Tanaka","Yamada","Kubo"]
#数値が入った配列
[21,69,169]
このように文字列が入った配列と数値が入った配列があります。
配列を変数に代入します。
names = ["Tanaka","Yamada","Kubo"]
puts names
-出力結果-
Tanaka
Yamada
Kubo
- このように
names
という変数に「Tanaka,Yamada,Kubo」という文字列が代入されました。
配列も1つの値なので、変数に代入することができます。
names = ["Tanaka","Yamada","Kubo"]
puts names[0]
-出力結果-
Tanaka
- 変数の場合と同様に、配列の要素の値も変数展開を用いて文字列の中に含めることができます。
names = ["Tanaka","Yamada","Kubo"]
puts "私の名前は#{names[0]}です"
-出力結果-
私の名前はTanakaです
- 繰り返し処理について学んでいきましょう。
繰り返し処理には、each文というものを使います。
each文を使うと、配列の要素を順番に取り出して処理を行うことができます。
配列.each do|変数名|
#実行したい処理
end
- 「|」で囲まれた変数に配列の要素が1つずつ入っていき、その上でeach文の中の処理が実行されていきます。
each文内の変数名(name)は好きな名前をつけられますが、配列の変数名(names)の単数形にすることが慣習上多いです。
names = ["Tanaka","Yamada","Kubo"]
names.each do|name|
puts name
end
-出力結果-
Tanaka
Yamada
Kubo
-
このように
names
という配列の中に入っている値を出力することができます。 -
ハッシュについて学んでいきましょう。
-
複数の値をまとめて管理する方法としては、配列の他にもハッシュというものがあります。
-
配列は複数の値を並べて管理するのに対して、ハッシュはそれぞれの値にキーと呼ばれる名前をつけてペアで管理します。
-
「ある値を入力すると、適切な値(ハッシュ値)を返してくれる」機能です。
文章だけだとイメージし難いので、以下の配列との違いを見てみましょう。
#配列の場合
[値1,値2]
#ハッシュの場合
{キー1 => 値1,キー2 => 値2}
→キー1を入力することで、値1が返される、キー2を入力することで、値2が返されるという構造になっています。
このように配列と書き方が似ているのがハッシュです。
###ハッシュに変数を代入してみよう。
ハッシュも1つの値なので、配列と同じで変数に代入し出力することができます。
それでは実際に代入して出力してみましょう。
user = {"name" => "Kida","age" => 29}
puts user
-出力結果-
{"name"=>"Kida", "age"=>29}
このようにuser
という変数に代入した値を出力できます。
またname
に入っていた値だけ取得したい場合は、このように書きます。
user = {"name" => "Kida","age" => 29}
puts user["name"]
-出力結果-
Kida
-
配列の場合はインデックスの番号で指定して出力できましたが、ハッシュの場合は出力したいキーを指定して出力できます。
-
ハッシュに変数を上書き
ハッシュ[キー] = 値と書くことで、キーと対応している値を更新することができます。
user
という変数にそれぞれ値が入っていましたが、user
を上書きしたいと思います。
user = {"name" => "Kida","age" => 29}
#userを上書きする。
user["name"] = "Yamada"
puts user
-出力結果-
{"name"=>"Yamada", "age"=>29}
このように値を上書きできます。
###ハッシュに要素を追加
ハッシュ[新しいキー] = 値と書くことで、ハッシュに新しい要素を追加することができます。
ハッシュにすでにあるキーを指定すると、要素の追加ではなく更新になってしまうので注意しましょう。
user = {"name" => "Kida","age" => 29}
user["country"] = "Japan"
puts user
-出力結果-
{"name"=>"Kida", "age"=>29, "country"=>"Japan"}
- このように
user
要素を追加することができます。
#シンボルについて学んで行きましょう。
シンボルとは、文字を「ダブルクォーテーション(")」や「シングルクォーテーション(')」で囲む代わりに、コロン(:)を付けた書き方のことを言います。
(稀に後ろにコロンを書く場合もあります。)
ハッシュを用いてシンボルの使い方を見ていきます
以下の様にコロン(:)を前置きして表記します。
:name
- シンボルを使って値を出力してみましょう。
#キーに文字列を用いた書き方
{"name" => "Kida","age" => 29}
#キーにシンボルを用いた書き方
{:name => "YAMADA", :age => 29}
- このように2通りの記載方法があります。
それでは変数に代入してみましょう。
user = {:name => "YAMADA", :age => 29}
puts user
{:name=>"YAMADA", :age=>29}
- シンボルを使って要素のみ値を出力してみましょう。
user = {:name => "YAMADA", :age => 29}
puts user[:name]
- 出力結果 -
YAMADA
- ハッシュのキーにシンボルを用いた書き方を学んでいきましょう。
ハッシュのキーにシンボルを用いるときには、省略した書き方をすることができます。具体的には「:key =>」を「key:」というように省略することができます。
{:name => "YAMADA", :age => 29}
#このように書き換えることができる
{name: "YAMADA", age: 29}
- では実際に書き換えて出力してみましょう。
user = {name: "YAMADA", age: 29}
puts user
{:name=>"YAMADA", :age=>29}
※書き方が違っても出力結果が同じという事を覚えておいてください。
user = {:name => "YAMADA", :country => "JAPAN", :age => 29}
- nilについて学んでいきましょう。
「nil」とは、「値が空である」事を指します。
ここまで、ハッシュ[キー]とすることでハッシュの値を取得してきました。
では、ハッシュに存在しないキーを指定すると、値はどうなるでしょうか?
- 存在しない
「:weight」
というキーの値を表示しようとした場合
user = {name: "YAMADA", age: 29}
puts user[:weight]
- 出力結果-
puts nil
- 出力結果-
-
条件分岐をするなかでのnilについて学んできましょう!
これまでは学習した内容では、ifの条件がtrueであれば実行し、falseであれば実行しない、というように学んでいました。
実は、ifの条件には、真偽値(trueとfalse)以外も使うことができます。Rubyでは、ifの条件に真偽値以外を用いたとき、それがnilであればfalseとして扱われ、それ以外はtrueとして扱われます。
実際の使い方を見ていきましょう。 -
trueの場合
user = {name: "YAMADA", age: 29}
if user[:name]
puts "#{user[:name]}さんは#{user[:age]}歳です"
else
puts "名前は秘密です。年齢は#{user[:age]}歳です"
end
- 出力結果 -
YAMADAさんは29歳です
- falseの場合
user = {age: 29}
if user[:name]
puts "#{user[:name]}さんは#{user[:age]}歳です"
else
puts "名前は秘密です。"
end
:name
に値が入っていないのでfalse
となり、else
の処理が実行されています。
- 配列の要素にハッシュを入れてみましょう。
配列の要素には、文字列や数値だけでなく、ハッシュも使うことができます。下記のように記載することができます。
[ {キー1:値1},{キー2:値2} ]
このように配列の中にハッシュを使うことができます。
- 配列の要素を確認してみよう。
配列の要素には、先頭からインデックス番号が割り振られていることを思い出してください。
インデックスの0番目、つまり{name: "YAMADA", age: 29}
を出力したいと思います。
user = [{name: "YAMADA", age: 29}, #インデックス[0]
{name: "KIDA", age: 35} #インデックス[1]
]
puts user[0]
- 出力結果 -
{:name=>"YAMADA", :age=>29}
配列[インデックス番号]でハッシュを用いることができるので、そのハッシュを代入した変数を使って、変数[キー]とすることでハッシュの要素の値することができます。
user = [{name: "YAMADA", age: 29}, #インデックス[0]
{name: "KIDA", age: 35} #インデックス[1]
]
user = user[1]
puts user[:name]
- 出力結果 -
KIDA
また上記を短く書くこともできます。
user = [{name: "YAMADA", age: 29}, #インデックス[0]
{name: "KIDA", age: 35} #インデックス[1]
]
puts user[1][:name]
- 出力結果 -
KIDA
どちらでも出力結果が同じなのでわかりやすい方を使ってください。
ただ初心者は最初の書き方をおすすめします!
配列をeach文を使い出力してみましょう。
ハッシュが値の配列でeachを使うとどうなるでしょうか。
- 基本的に似ている考え方です。
- 変数に、配列の各要素が順番に代入されます。
users = [{name: "YAMADA", age: 29},
{name: "KIDA", age: 35}
]
users.each do |user|
puts user
end
- 出力結果 -
{:name=>"YAMADA", :age=>29}
{:name=>"KIDA", :age=>35}
Discussion