2013-09-21 53 views
0

哈希我想我誤會哈希作爲關注下面的代碼:類型錯誤,同時增加鍵/值對中迭代

require 'rest-client' 
require 'json' 

def get_from_mashable 
    res = JSON.load(RestClient.get('http://mashable.com/stories.json')) 

    res["hot"].map do |story| 
    s = {title: story["title"], category: story["channel"]} 
    add_upvotes(s) 
    end 
end 

def add_upvotes(hash) 
    hash.map do |story| 
    temp = {upvotes: 1} 
    if story[:category] == "Tech" 
     temp[:upvotes] *= 10 
    elsif story[:category] == "Business" 
     temp[:upvotes] *= 5 
    else 
     temp[:upvotes] *= 3 
    end 
    end 
    hash.each {|x| puts x} 
end 

get_from_mashable() 

我從這個出現以下錯誤:

ex_teddit_api_news.rb:16:in `[]': no implicit conversion of Symbol into Integer (TypeError) 

我想將upvotes鍵和相應的整數值添加到從get_from_mashable中的JSON對象創建的每個散列中。在循環中,我並不試圖擦除每個散列的內容,而只用新的鍵/值對替換它,我有一種感覺,我可能會這樣做。

任何幫助表示讚賞。

+1

你能做'p res'嗎? –

回答

1

由於您沒有提供足夠的信息,我們只能猜測,但最有可能的是,story是一個數組,而不是散列。

+0

從OP的代碼看來,這似乎很合理,「hash.map do | story |'會導致'story'迭代'[key,value]' –

+0

@NeilSlater你是對的。但是OP沒有付出足夠的努力來解釋。 – sawa

1

這將返回一個散列數組,其中每個散列都有鍵標題,類別和upvotes。

require 'rest-client' 
require 'json' 

def get_from_mashable 
    res = JSON.load(RestClient.get('http://mashable.com/stories.json')) 

    res["hot"].map do |story| 
    s = {title: story["title"], category: story["channel"], upvotes: get_upvotes(story["channel"]) } 
    end 
end 



def get_upvotes(category) 
    case category 
     when "Tech" 
     10 
     when "Business" 
     5 
     else 
     3 
    end 
end 

get_from_mashable() 
相關問題