2016-05-10 7 views
2

のハッシュを初期化することのが次のように私はハッシュのハッシュを持っているとしましょう:ハッシュ

order_history[customer_id] = {} unless order_history.has_key?(customer_id) 
:私は、このハッシュにエントリを追加すると

order_history = {} 

order_history[customer_id][order_id] = { :total_spend => order_spend, :date => order_date } 

私はそうのように、とcustomer_idが最初に存在するかどうかを確認する必要があります

その後、私は、個々の注文の詳細を追加することができます

order_history[123][456] = { :total_spend => 200.45, :date => 2016-05-03 } 

としてorder_historyハッシュを宣言することが可能です最初はハッシュハッシュなので、毎回テストを行う必要はありませんか?または、新しいキーが作成されたときに値を新しい空のハッシュに設定するというRubyに伝える方法はありますか?

答えて

3

あなたは、ハッシュのためにこれを試すことができます。詳細については

h = Hash.new { |h, k| h[k] = Hash.new(&h.default_proc) } 

h['bar'] -> {} 
h['tar']['star']['par'] -> {} 

、この答えは、このpost

0

からである@XavMが提供する答えは完全に質問に答える一方で、私はここにドロップします優れたHashie#Mashを参照してください。後者を使用して、1は文字列キーのために行う可能性があります:

▶ require 'hashie/mash' 
▶ hm = Hashie::Mash.new 
#⇒ {} 
▶ hm.foo.bar 
#⇒ NoMethodError: undefined method `bar' for nil:NilClass 

しかし:

▶ hm.foo!.bar 
#⇒ nil 
▶ hm.foo!.bar! 
#⇒ {} 

は、時にはそれがdefault_procを定義するよりも、より便利です。

NB OPに記載された質問に対する正解は@XavMによって提供されていますので、アップしてください。私はちょうど補遺としてここにそれを落とした。

関連する問題