2011-11-27 40 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