2014-01-25 52 views
0

我試着用的值來搜索該哈希:用戶搜索由紅寶石價值散列返回nil

cache = { 
    {:user=>1}=>{:last_visit=>2014-01-25 09:22:42 -0800, :frequency=>0}, 
    {:user=>2}=>{:last_visit=>2014-01-25 09:22:43 -0800, :frequency=>0}, 
    {:user=>3}=>{:last_visit=>2014-01-25 09:22:43 -0800, :frequency=>0} 
} 

我嘗試了很多事情,包括以下,但我總是零

new_user = cache.select{|key, hash| hash[:user] == user } 

new_user = cache.invert[:user=>user] 

我究竟做錯了什麼?

+0

你是什麼意思'#顛倒'?你希望用它做什麼? –

回答

5

待辦事項如下

cache = {{:user=>1}=>{:last_visit=>'2014-01-25 09:22:42 -0800', :frequency=>0}, {:user=>2}=>{:last_visit=>'2014-01-25 09:22:43 -0800', :frequency=>0}, {:user=>3}=>{:last_visit=>'2014-01-25 09:22:43 -0800', :frequency=>0}} 
cache.select{|key_hash,value_hsh| key_hash[:user] == 2 } 
# => {{:user=>2}=>{:last_visit=>"2014-01-25 09:22:43 -0800", :frequency=>0}} 

cache哈希具有鍵和值,其中鍵也哈希和值也散。符號:user是您的cache散列的關鍵散列的關鍵。在您的代碼cache.select{|key, hash| hash[:user] == user }中,您使用值散列搜索密鑰:user,而不是密鑰散列。

現在,作爲每文檔Hash#[] -

元素參考-檢索對應於該鍵對象的值的對象。如果未找到,則返回nil(如果未設置默認值,則返回默認值)。

所以在你的情況下hash[:user]總是返回nil。因此cache.select { .. }總是返回空數組。