【问题标题】:How to grab all values in a hash without specifying individual values in Ruby?如何在不指定 Ruby 中的单个值的情况下获取哈希中的所有值?
【发布时间】:2015-06-24 05:07:33
【问题描述】:

这是对我昨天提出的一个问题的补充,但我觉得它需要一个新问题。

我正在接受 JSON 响应,并希望在每次迭代中提取所有值并将它们放入数组中

@response =  { "0"=>{"forename_1"=>"John", "surname_1"=>"Smith", forename_2"=>"Josephine", "surname_2"=>"Bradley", "middle_1"=>""}, 
               "1"=>{"forename_1"=>"Chris", "surname_1"=>"Jenkins", forename_2"=>"Christine", "surname_2"=>"Sugar", "middle_1"=>""}, 
               "2"=>{"forename_1"=>"Billy", "surname_1"=>"Bob", forename_2"=>"Brenda", "surname_2"=>"Goodyear", "middle_1"=>""},
               "Status" => 100
             }

目前这个方法把我想要的特定值放入我想要的数组中。

col = @response.values.grep(Hash).map { |h| "#{h['forename_1']} #{h['surname_1']} #{h['forename_2']} #{h['surname_2']} #{h['middle_1']}" }

有没有办法说抓取所有值并将它们放入一个数组中(我有一个返回超过 25 个键/值对的响应)。

目前,如果 middle_1 没有值,则将 " " 放入数组中,理想情况下我想删除这些。

理想情况下,我希望我新形成的数组看起来像

["John Smith Josephine Bradley", "Chris Jenkins Christine Sugar", "Billy Bob Brenda Goodyear"]

即使没有提供middle_1,数组中也没有双空格。我想学习如何解决这个问题。

【问题讨论】:

  • 您能否提供输入 JSON 的示例并说明您期望的输出?

标签: ruby arrays hash hashmap


【解决方案1】:

也许会提供“破解”hash 并提取您需要的内容的示例:

h = {a1: "a", b2: "b", c3: "", d4: nil, e5: "e"}

values = h.values.map(&:to_s).reject(&:empty?)
# => ["a", "b", "e"]

values.join(" ")
# => "a b e"

让我们考虑h.values.map(&:to_s).reject(&:empty?)

values = h.values
# => ["a", "b", "", nil, "e"]

values = values.map(&:to_s)
# => ["a", "b", "", "" "e"]

values = values.reject(&:empty?)
# => ["a", "b", "e"]

希望这能让您了解如何继续。

祝你好运!

更新

对于提供的hash,您可以很容易地重用我上面描述的内容:

col = @response.values
               .grep(Hash)
               .map { |h| h.values.map(&:to_s).reject(&:empty?).join(" ") }

p col
# => ["John Smith Josephine Bradley", "Chris Jenkins Christine Sugar", "Billy Bob Brenda Goodyear"]

【讨论】:

  • 谢谢@Pawel 我已经用我的场景更新了我的问题,我在一个数组中有多个哈希
  • 嘿@Richlewis,我已经更新了答案以显示我的代码适合的位置。希望对您有所帮助!
  • 是的,这很有帮助,感谢您花时间整理示例
  • 你应该使用的方法是empty?(带问号),而不是empty
  • 是的,刚刚意识到,这就是我删除评论的原因,再次感谢:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-02
  • 1970-01-01
  • 1970-01-01
  • 2011-04-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多