在ruby中按值搜索哈希值返回nil

时间:2014-01-25 17:42:49

标签: ruby

我试图通过以下值搜索此哈希:user

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]

我做错了什么?

1 个答案:

答案 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哈希具有键和值,其中键也是哈希值,值也是哈希值。符号:usercache哈希的密钥哈希的关键字。在您的代码cache.select{|key, hash| hash[:user] == user }中,您在值哈希中搜索键:user,而不是密钥哈希值。

现在根据文档Hash#[] -

  

元素引用 - 检索与键对象对应的值对象。如果未找到,则返回nil(如果未设置默认值,则为默认值)。

因此,在您的情况下,hash[:user]始终返回nil。因此cache.select { .. }总是返回空数组。