最近の勉強で学んだ事を、ノート代わりにまとめていきます。
主に自分の学習の流れを振り返りで残す形なので色々、省いてます。
Webエンジニアの諸先輩方からアドバイスやご指摘を頂けたらありがたいです!
Hash(連想配列)を取り除く
前回からの続きです!
・[Ruby]ネストされたHash(連想配列)をフラット(1階層)にする①
ここからやっていきたいのは配列に入っている要素がHashだったら変数に変換する処理します。
要は、配列に入っている要素をチェックしてHashだったら特定の処理をしたら良いのです。
#配列の場合
family_array = [ "sazae", "masuo", "tarao" ]
pry(main)> family_array.is_a?(Hash)
=> false
#連想配列の場合
family_hash = { "tsuma" => "sazae", "otto" => "masuo", "kodomo" => "tarao" }
pry(main)> family_hash.is_a?(Hash)
=> true
・Hashかどうかを判定しつつ任意の{key: value}を持っているかどうかを判定するメソッドを作った
配列の要素を確認する処理
・配列に対する繰り返し
・Ruby eachが初心者でも書ける!知っていると便利な知識とは?
array = hash.each_with_object([]) {|(k, v), array| array.concat v}
pry(main)> i=0
pry(main)> array.each do |var|
pry(main)* if var.is_a?(Hash)
pry(main)* params = var.keys
pry(main)* array.delete_at(i)
pry(main)* array.concat(params)
pry(main)* print(array)
pry(main)* end
pry(main)* i=i+1;
pry(main)* end
=> [:name,
:gender,
:birthday,
:primary,
:clinic,
:status,
:age,
:cycle,
:history_test,
:culture_test,
:math_test,
:house,
:address,
:favorite,
:score,
:history_score,
:culuture_score,
:math_score,
:levels,
:experience]
できた!
メソッドにしていく!
フラットにする為の処理をメソッドにしていきます!
・Rubyのメソッドについて
メソッドとは
メソッドは色々な処理をひとつにまとめて定義して、何度も再利用(実行)できるようにしたものです。
def メソッドの名前
やりたい処理
end
ではメソッド化していきます!
def flat_params(array)
i=0
array.each do |var|
if var.is_a?(Hash)
params = var.keys
array.delete_at(i)
array.concat(params)
end
i=i+1;
end
end
array = hash.each_with_object([]) {|(k, v), array| array.concat v}
array = flat_params(array)
=> [:name,
:gender,
:birthday,
:primary,
:clinic,
:status,
:age,
:cycle,
:history_test,
:culture_test,
:math_test,
:house,
:address,
:favorite,
:score,
:history_score,
:culuture_score,
:math_score,
:levels,
:experience]
これでフラットにできました!
参考記事
・class Array
・【Ruby入門】ハッシュ(hash)をeachで取り出す!その他ハッシュの応用について
・Rubyで配列の要素数を調べるための3つのメソッドまとめ
・【Ruby入門】Rubyにおけるメソッド(関数)の使い方