【问题标题】:How to organize hashes by property如何按属性组织哈希
【发布时间】:2016-05-25 21:50:50
【问题描述】:

这里是要处理的哈希:

{
      "flatiron school bk" => {
        :location => "NYC"
      },
      "flatiron school" => {
        :location => "NYC"
      },
      "dev boot camp" => {
        :location => "SF"
      },
      "dev boot camp chicago" => {
        :location => "Chicago"
      },
      "general assembly" => {
        :location => "NYC"
      },
      "Hack Reactor" => {
        :location => "SF"
      }
}

我需要按位置组织这些哈希,如下所示:

{    "NYC"=>["flatiron school bk", "flatiron school", "general assembly"],
     "SF"=>["dev boot camp", "Hack Reactor"],
     "Chicago"=>["dev boot camp chicago"]}
}

【问题讨论】:

    标签: ruby hashmap


    【解决方案1】:

    您可以使用 each_with_object 组合成新的哈希:

    hash.each_with_object({}) do |(name, data), res|
      (res[data[:location]] ||= []) << name
    end
    

    说明:

    each_with_object 使用给定的任意对象迭代每个元素的给定块,并返回最初给定的对象。

    在这种情况下,名称和数据是给定哈希中每个元素的键和值。 在(res[data[:location]] ||= []) &lt;&lt; name 中获取位置,在给定位置的结果哈希中创建数组(如果它不存在),然后将输入哈希的键放入其中。

    【讨论】:

    • @StevenKwok 添加说明
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-12
    • 2016-06-27
    • 2021-01-22
    • 2013-04-21
    • 2015-09-10
    • 2017-02-15
    • 2017-08-12
    相关资源
    最近更新 更多