A

プログラミングの学習記録

【本日の学習内容:配列, ハッシュ】

配列とハッシュについて学習しました。

 

 

配列
複数のデータを格納することができるクラス

配列は以下のように定義する

users = ["Saito", "Tanaka", "Suzuki", "Yamada"]
ages = [22, 34, 12, 45]


配列から要素を取り出すには以下のように記述する
ages = [22, 34, 12, 45]
# 配列を格納した変数に添え字(インデックス番号)をつける
puts ages[0]

出力結果
22


配列は繰り返し処理のeachとの組み合わせでよく使われる
users = ["Saito", "Tanaka", "Suzuki", "Yamada"]
users.each do |users|
puts "Hello!! #{name}."
end
 

ハッシュ
配列と同様に複数のデータを扱うことができるクラス
データはキーとバリューの組み合わせになっている


# 名前、メール、住所のデータが入ったハッシュの定義
# キー:name, email, address
# バリュー:Tanaka, hoge@co.ne.jp, Saitama
params = {name: "Tanaka", email: "hoge@co.ne.jp", adress: "Saitama"}
puts params[:name]

出力結果
Tanaka

ハッシュを使うメリットはデータの順番を意識しないで済むこと

上のサンプルのようにname を指定してデータを取り出すと格納された順番に関係なく name に紐づく Tanaka というデータを取り出すことができる

そのため必要な処理をするためには番目のデータを取り出さなければいけないといったように順番を考慮する必要がありません

またハッシュはキーとバリューの組み合わせでデータを扱うことができるので名前やメールアドレス住所など色んな種類のデータを格納するときに便利


ハッシュの定義方法としては以下のような書き方もある
基本的には name: というようにシンボルを用いてキーを記述するが"name" のように文字列でも記述できる
params = {"name" => "Tanaka", "email" => "hoge@co.ne.jp", "adress" => "Saitama"}
puts params["name"]

ハッシュは以下のように途中で改行することもできる
params = {
"name" => "Tanaka",
"email" => "hoge@co.ne.jp",
"address" => "Saitama"
}

puts params["name"]


ハッシュで使用される {} の部分はeach でも使用されるので混同しないように注意
# ハッシュ
{ "name" => "Tanaka", "email" => "hoge@co.ne.jp", "address" => "Saitama" }

# each {} を使用して以下のようにも書ける
["satou", "tanaka", "yamada", "shimizu"].each {|name| puts "Hello!! #{name}." }

ハッシュは定義した後にもデータを書き換えたり追加したりできる
params = { name: "Tanaka", email: "hoge@co.ne.jp", address: "Saitama" }
# データの書き換え
params[:name] = "Saito"

# データの追加
params[:age] = 33

puts params[:name]
puts params[:age]

# 存在しないキーを指定するとnilになる
params[:hobby]

出力結果
Saito
33

配列と同様ハッシュにも繰り返し処理を行うことができる
params = { name: "Tanaka", email: "hoge@co.ne.jp", address: "Saitama" }
params.each do |key, value|
puts "キー:#{key}"
puts "バリュー:#{value}"
end

またeach メソッドのブロック引数の数を1つにするとハッシュの中にキーとバリューが格納される
params = { name: "Tanaka", email: "hoge@co.ne.jp", address: "Saitama" }
params.each do |key_value|
# 配列を出力
puts key_value
puts key_value[0]
puts key_value[1]
end


ハッシュはハッシュ同士で比較を行うことができる
キーとバリューが等しい場合は true を返しそうでない場合は false を返す
params1 = { name: "Tanaka", email: "hoge@co.ne.jp", address: "Saitama" }
params2 = { name: "Tanaka", email: "hoge@co.ne.jp", address: "Saitama" }

# trueが返る
puts params1 == params2


ハッシュの要素はキーを指定して削除することができる
params = { name: "Tanaka", email: "hoge@co.ne.jp", address: "Saitama" }
params.delete(:name)


シンボル
: の後に任意の名前をつけた文字列のような見た目のオブジェクト
シンボルは文字列とよく似ているがRubyの内部では整数として扱われる
見た目が文字列っぽいので読みやすい
内部的には整数なので処理が速い
メモリの使用効率がいい
破壊的メソッドが使えないので値が勝手に変更される心配がない

そのため2つの値が同じかどうかを比べる場合は文字列よりも高速で処理を行うことができます

"name" == "name"
:name == :name


ハッシュのキーのみを取り出すときは以下のように記述する
params = { name: "Tanaka", email: "hoge@co.ne.jp", address: "Saitama" }
params.each_key do |key|
puts "キー:#{key}"
end

出力結果
キーname
キーemail
キーaddress


ハッシュのバリューのみを取り出すときは以下のように記述する
params.each_value do |value|
puts "バリュー:#{value}"
end