0

私の目標は、次のようにハッシュに空白があるかどうかを判断することです。

{"departure_time_slots"=>{"date"=>[""], "time"=>{"start"=>[""], "end"=>[""]}}}

文字列は任意の回数ネストされます。それぞれを手動でチェックしたくありません。文字列の深さに関係なく、すべての文字列を抽出できればいいのにと思います。それを行う簡単な方法はありますか?

4

3 に答える 3

5

値を抽出する方法の例を次に示します。ただし、値をキーに一致させるという問題は依然としてあります。両方を同時に持つことは実際にはありません。

# Extend the Hash class
class Hash
  def recursive_values
    self.values.collect { |v|
      v.is_a?(Hash) ? v.recursive_values : v
    }.flatten
  end
end

使用法:

h = {"departure_time_slots"=>{"date"=>[""], "time"=>{"start"=>[""], "end"=>[""]}}}
h.recursive_values
=> ["", "", ""]
于 2012-12-29T17:13:31.023 に答える
0

あなたがそのようなsthを使うならば、それはより良いでしょう:

departure_time_slots = {:date => Time.new, :time_start => nil, :time_end => nil}

また、ハッシュでキーを使用する場合は、キーにシンボルを使用することをお勧めします。(http://www.ruby-doc.org/core-1.9.3/Symbol.html)

于 2012-12-29T17:09:01.290 に答える
0

いいえ、できません。それらは互いに異なる範囲で完全に存在しているからです。たとえば。キーstartであり、上記の例のオブジェクトendから完全に不明でマスクされています。departure_time_slots

1 つの方法として、hashmap 型の hashmap のすべての値を再度取得し、それらのキーを再帰的に取得する方法があります。

のキーを取得departure_time_slotsし、そのマップの値リストから、すべての値からすべてのキーを見つけます (それがハッシュマップである場合)。それ以外に方法はないと思います。

PS補足として、要素を配列にすることもできる配列に構造を変更できるかどうかを確認し、配列のフラット化の概念を試してみてください。:P

于 2012-12-29T16:48:53.673 に答える