2017-09-22 99 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