2011-11-27 39 views
1

我在Ruby中的函数:(全局变量$items是一个Hash对象映射几串一些价值决定的item的属性)红宝石认为,哈希的元素是整数

def find_item(keyword) 
    potential = [] 
    $items.each do |item| 
     puts item         # <-- for debugging purposes 
     if item["name"].downcase== keyword 
      potential << item["name"].downcase 
     elsif item["keywords"].index(keyword) != nil 
      potential << item["name"].downcase 
     end 
    end 
    return potential 
end 

当我puts它遍历当前项目(用注释的行做到了这一点),它给了我:

{"name"=>"Thing1", "keywords"=>["thing", "green"], ...}

但是当我尝试item["name"]下一行(这绝对应该返回Thing1),它给了我:

C:/somepath/someprogram.rb:125:in '[]': can't convert String into Integer (TypeError)

回答

2

如果$items是一个Hash,然后$items.each do |item|将产生[key, value]双(阵列)的块。如果您只需要这些值,请使用each_value

+2

如果您需要键和值,请使用解构绑定。 –

+1

如果你不知道“解构绑定”(我自己从来没有在Ruby社区听说过),他的意思是做类似'$ items.each do | key,value |' –

+0

呃好吧,这似乎是问题所在: ) 谢谢! – itdoesntwork