散列数组返回值
问题描述:
我有一项任务,我无法弄清楚我的错误在哪里。我在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
但是,输出为我提供了大约七个:,前面没有用户名或之后的描述。
答
正如你所看到的description
密钥嵌套在另一个密钥中,密钥为User
。我不知道这是要打印,因为数据似乎不全等关键,但如果你想打印只是说明这个应该工作
twitter_data.each do |user_data|
description = user_data["User"]["description"]
puts description
end
答
有几个原因,这不工作:
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
使用的收集相同的变量名,以及项目('twitter_data')肯定是混乱。 'User'下的哪个字段定义了用户的名字? – Joe