対象読者
プログラミング初学者
配列に関して
配列(array)は複数の値をまとめて管理したいときに使用する。
配列内で管理されるものは”要素(element)”と呼ばれる。
##配列の定義のしかた
#例1
array = Array.new
#例2
fruits = ["apple", "banana"]
##配列に要素を追加する方法
型は以下の通り。
配列.push(追加する要素)
例えば
#空の配列を用意して
array = Array.new
#"A"を追加するには
array.push("A")
puts array # 出力結果 ["A"]
また、一度に複数の要素を追加したい時は
#先ほどの配列をそのまま適用すると
array.push("B", "C")
puts array # 出力結果 ["A", "B", "C"]
要素の間に要素を追加(挿入)する方法
型は以下の通り。
配列.insert(挿入位置, 挿入する要素)
例えば
#以下の配列があったとして
array = ["A", "B", "D"]
#"C"を挿入する場合は
array.insert(2, "C")
puts array # 出力結果 ["A", "B", "C", "D"]
また、一度に複数の要素を挿入したい時は、第3引数以降に要素を渡す。
#先ほどの配列をそのまま適用すると
array.insert(2, 1, 2)
puts array # 出力結果 ["A", "B", 1, 2, "C", "D"]
##配列内の要素を削除する方法
型は以下の通り。
配列.delete(削除する要素)
例えば
#以下の配列があったとして
array = ["A", "B", 1, 1, 2, "C", "D"]
#1を削除するには
array.delete(1)
puts array # 出力結果 ["A", "B", 2, "C", "D"]
()内の引数に渡した要素と一致するものをすべて配列から削除する。
##指定位置の要素を削除する方法
型は以下の通り。
配列.delete_at(削除位置)
例えば
#以下の配列があったとして
array = ["A", "B", 2, "C", "D"]
#2を削除するには
array.delete_at(2)
puts array # 出力結果 ["A", "B", "C", "D"]
指定範囲の要素を削除する方法
型は以下の通り。
配列.slice!(削除開始位置, 削除する長さ)
例えば
#以下の配列があったとして
array = ["A", "B", 1, 1, 2, "C", "D"]
#1,1,2を削除するには
array.slice!(2, 3) # 出力結果 ["A", "B", "C", "D"]
#または
array.slice!(2..4)
#上記の型は
配列.slice!(削除範囲)
配列の中の要素を取り出す方法
型は以下の通り。
array[要素番号]
例えば
#以下の配列があったとして
array = ["A", "B", "C", "D"]
# "A"を取得するには
puts array[0] # 出力結果 "A"
ハッシュに関して
キーとバリュー(値)を組み合わせて保持するデータ構造のこと。
配列は一つの要素にオブジェクトが一つ入っていたのに対して、ハッシュはオブジェクトがキーとバリューの二つ入っている。
##ハッシュの定義のしかた
#例1
hash = Hash.new
#例2
user = {user1: "たけし", user2: "たかし"}
要素を追加する方法
型は以下の通り。
ハッシュ[追加したい要素のキー] = 値
例えば
#以下の配列があったとして
users = {user1: "たけし", user2: "たかし"}
# キーがuser3、バリューがけんじの要素を追加するには
users[:user3] = "けんじ"
puts users # 出力結果 {:user1=>"たけし", :user2=>"たかし", :user3=>"けんじ"}
そのほかの追加の方法としては、以下があります。
ハッシュ.store(追加したい要素のキー, 値)
具体例は以下の通り。
#以下の配列があったとして
users = {user1: "たけし", user2: "たかし"}
# キーがuser3、バリューがけんじの要素を追加するには
users.store("user3", "けんじ")
puts users # 出力結果 {:user1=>"たけし", :user2=>"たかし", :user3=>"けんじ"}
要素を削除する方法
型は以下の通り。
ハッシュ.delete(削除したい要素のキー)
例えば
#以下の配列があったとして
users = {:user1=>"たけし", :user2=>"たかし", :user3=>"けんじ"}
# キーがuser3、バリューがけんじの要素を削除するには
users.delete("user3")
puts users # 出力結果 {:user1=>"たけし", :user2=>"たかし"}
値が(キーと一緒に)ハッシュから取り除かれる。
ハッシュの中の特定のバリューを取得する方法
型は以下の通り。
ハッシュオブジェクト[:キー名]
例えば
#以下の配列があったとして
users = {:user1=>"たけし", :user2=>"たかし"}
# "たかし"を取り出す時は
puts users[:user2]
ハッシュの中のバリュー一覧を取得する方法
例えば
#以下の配列があったとして
users = {:user1=>"たけし", :user2=>"たかし"}
puts users.values # 出力結果 たけし, たかし
ハッシュの中のキー一覧を取得する方法
例えば
#以下の配列があったとして
users = {:user1=>"たけし", :user2=>"たかし"}
puts users.keys # 出力結果 [:user1, :user2]
問題
配列の内部に、複数のユーザーの情報をハッシュとして持つ変数user_dataがある。
user_dataを利用して、全てのユーザーの名前だけが出力されるようにRubyでコーディングしてください。
user_data = [
{user: {profile: {name: 'George'}}},
{user: {profile: {name: 'Alice'}}},
{user: {profile: {name: 'Taro'}}}
]
## 解答
user_data.each do |u|
puts u[:user][:profile][:name]
end
#または
user_data.each{ |u| puts u.dig(:user, :profile, :name) }