【问题标题】:Return values in an array of hashes返回哈希数组中的值
【发布时间】:2023-04-01 02:54:01
【问题描述】:

我有一个任务,我无法弄清楚我的错误在哪里。我在方法 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

但是输出只给了我大约七个:,前面没有用户名或后面的描述。

【问题讨论】:

  • 对集合和项目 (twitter_data) 使用相同的变量名肯定会令人困惑。 User 下的哪个字段定义了用户名?

标签: arrays ruby hash


【解决方案1】:

如您所见,description 键嵌套在另一个散列中,该散列键为User。我不知道您要打印的另一个键是哪个键,因为数据似乎不完整,但如果您只想打印描述,这个键应该可以工作

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

【讨论】:

    【解决方案2】:

    这不起作用有几个原因:

    1) each 中的 twitter_data 元素看起来像这样 { 'User' => { 'description'...。在该哈希上,:description 键下存储的值为零。

    2) 即使您在哪里通过twitter_data['User'] 引用正确的哈希值,您仍然会使用符号(例如:description)而不是字符串。所以即使那样,为键存储的值也将是 nil。

    3) 您引用的元素似乎不存在于散列中,即使在使用字符串的地方(例如:twitter_data)。现在这可能只是由于选择的示例。

    正确地引用哈希是可行的:

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

    【讨论】:

      猜你喜欢
      • 2017-03-21
      • 1970-01-01
      • 1970-01-01
      • 2020-12-26
      • 1970-01-01
      • 2014-11-14
      • 1970-01-01
      • 1970-01-01
      • 2021-06-11
      相关资源
      最近更新 更多