Rubyコーディングあれこれ (初めての方むけ:自己増殖するハッシュ)
本地震の予測マップ・プログラムはRubyで書かれていますが、以前から初めての方むけにコーディングテクのようなモノをまとめておければ、と考えていました。 そこで思い付くままにまとめてみよう、と考えております。
今回は、自己増殖するハッシュです。 (短くまとめます)
あるデータの塊があって処理していたら同じ形式だが新規なデータが検出されたので、そのデータを追加して処理を続行したい、という状況はよくあります。 データを自己増殖させて自分自身で完結させたい、という要求です。 データの塊は配列かハッシュで表現されていると思いますが、このハッシュ版についてです。
データは、ハッシュ名 data_hs に入っている、とします。
loop do # 無限ループ宣言
before = data_hs.size # 処理前のハッシュサイズを出しておきます
data_hs.keys.each do |key| # keys.eachを使ってキーをスキャンします
new_key, new_item = application(key, hash) # アプリの処理
# ^^^新規データnew_itemが検出されたらnew_keyと一緒に戻しています
if new_key != nil # new_keyが検出されていたら
hash_hs[new_key] = new_item # ハッシュを増殖させてループ脱出
break end
end
break if data_hs.size == before # 新規データitemが検出されなくなるまでloop
end # 無限ループ終端
ここでハッシュを自己増殖させるにはkeys.eachでないと出来ません。 each_keyではエラーとなります。
keys.eachとeach_keyではeach_keyの方が処理は早いのですが、自己増殖させたければkeys.eachを使います。
以上です。