2017-09-22 111 views
0

我有一項任務,我無法弄清楚我的錯誤在哪裏。我在twitter_data方法下有大量哈希。散列結構就像這樣。散列數組返回值

def twitter_data 
[{"User"=> 
    {"description"=> 
    "Description here", 
    "last twenty tweets"=> 
    ["tweets written out here"], 
    "number of followers"=>1000, 
    "number of friends"=>100, 
    "latest tweet"=> 
    "tweet written out here", 
    "number of tweets"=>1000, 
    "location"=>"Wherever, Wherever"}},] 
end 

現在,如果我想舉例列出所有的用戶及其描述,我認爲代碼會這樣讀取。

twitter_data.each do |twitter_data| 
    puts "#{twitter_data[:twitter_data]}: #{twitter_data[:description]}" 
end 

但是,輸出爲我提供了大約七個:,前面沒有用戶名或之後的描述。

+0

使用的收集相同的變量名,以及項目('twitter_data')肯定是混亂。 'User'下的哪個字段定義了用戶的名字? – Joe

回答

0

正如你所看到的description密鑰嵌套在另一個密鑰中,密鑰爲User。我不知道這是要打印,因爲數據似乎不全等關鍵,但如果你想打印只是說明這個應該工作

twitter_data.each do |user_data| 
    description = user_data["User"]["description"] 
    puts description 
end 
0

有幾個原因,這不工作:

1)each內部的twitter_data元素看起來像這樣{ 'User' => { 'description'...。在該散列上,存儲在:description密鑰下的值爲零。

2)即使你在哪裏通過twitter_data['User']來引用正確的散列,你仍然會使用符號(例如:description)而不是字符串。所以即使這樣,爲鍵存儲的值也是零。

3)即使在使用字符串的地方使用字符串(例如:twitter_data),也會引用哈希中似乎不存在的元素。現在這可能僅僅是由於所選的例子。

什麼工作是正確引用散列:

twitter_data.each do |data| 
    user_hash = data['User'] 
    puts "#{user_hash['twitter_data']}: #{user_hash['description']}" 
end