Quantcast
Channel: 配列タグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 813

[Ruby]ネストされたHash(連想配列)をフラット(1階層)にする②

$
0
0

最近の勉強で学んだ事を、ノート代わりにまとめていきます。
主に自分の学習の流れを振り返りで残す形なので色々、省いてます。
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.concatv}pry(main)>i=0pry(main)>array.eachdo|var|pry(main)*ifvar.is_a?(Hash)pry(main)*params=var.keyspry(main)*array.delete_at(i)pry(main)*array.concat(params)pry(main)*print(array)pry(main)*endpry(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

ではメソッド化していきます!

defflat_params(array)i=0array.eachdo|var|ifvar.is_a?(Hash)params=var.keysarray.delete_at(i)array.concat(params)endi=i+1;endendarray=hash.each_with_object([]){|(k,v),array|array.concatv}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におけるメソッド(関数)の使い方


Viewing all articles
Browse latest Browse all 813

Trending Articles