2012-04-02 37 views
1

我有鑰匙的排序的數組是這樣的:加入的按鍵陣列與Excel等鍵值對的哈希VLOOKUP

keys = ["ccc", "ddd", "ggg", "aaa", "bbb"] 

和哈希

hash = {"ddd" => 4, "aaa" => 1, "bbb" => 2, "eee" => 5, "fff" => 6} 

我會想加入這兩個數據結構中的鍵的原始順序返回哈希第一項:

{"ccc" => nil, "ddd" => 4, "ggg" => nil, "aaa" => 1, "bbb" => 2} 

哈希NOT項目(LIK e「ggg」)應返回零。 這與excel中的「v-lookup」函數類似。 這是紅寶石。謝謝!

+0

在你期望的散列,爲什麼是 「CCC」 3,而不是零?爲什麼是「ddd」4而不是3? – 2012-04-02 18:32:54

+0

,因爲我寫了這個問題沒有足夠的咖啡因。現在應該糾正。 – hagope 2012-04-02 18:59:35

回答

4

隱祕:

Hash[keys.zip(hash.values_at *keys)] 

或者時間長一點,少了幾分神祕:

keys.map.with_object({}) {|key, memo| memo[key] = hash[key]} 
+1

+1爲功能解決方案。我不會稱之爲神祕的,它描述了它究竟在做什麼。 – tokland 2012-04-02 19:02:21

+0

如果不是哈希,我有一個這樣的哈希數組:[{「ddd」=> 4},{「aaa」} => 1 ...]這個解決方案仍然有效嗎? – hagope 2012-04-02 19:11:36

+0

爲什麼你會有這樣一個愚蠢的數據結構?只需將其映射到'keys'數組即可。 – Reactormonk 2012-04-02 19:15:53