【问题标题】:Reorganizing Ruby array into hash将 Ruby 数组重组为哈希
【发布时间】:2009-09-10 14:34:19
【问题描述】:

我有一个Products 数组,每个数组都有一个名称和一个类别。我想生成一个散列,其中每个键都是一个类别字符串,每个元素都是具有该类别的产品,类似于以下内容:

{ "Apple" => [ <Golden Delicious>, <Granny Smith> ], ...
  "Banana" => ...

这可能吗?

【问题讨论】:

    标签: ruby arrays hash


    【解决方案1】:

    在 1.8.7+ 或使用 active_support(或方面,我认为),您可以使用 group_by:

    products.group_by {|prod| prod.category}
    

    【讨论】:

      【解决方案2】:
      h = Hash.new {|h, k| h[k] = []}
      products.each {|p| h[p.category] << p}
      

      【讨论】:

        【解决方案3】:

        单人班

        arr = [["apple", "granny"],["apple", "smith"], ["banana", "chiq"]]
        h = arr.inject(Hash.new {|h,k| h[k]=[]}) {|ha,(cat,name)| ha[cat] << name; ha}
        

        :-)

        但我同意,#group_by 更优雅。

        【讨论】:

          【解决方案4】:
          # a for all
          # p for product
          new_array = products.inject({}) {|a,p| a[p.category.name] ||= []; a[p.category.name] << p}
          

          【讨论】:

          • 您在注入块的末尾缺少“;a”——该块必须返回备忘录哈希。
          • 感谢您的来信!但最后一个表达式不返回哈希值吗?
          • 不,它返回a[p.category.name]数组(Array#
          • 使用注入的略短版本: products.inject(Hash.new([])) {a[p.category.name] += [p];一}
          猜你喜欢
          • 2010-12-11
          • 1970-01-01
          • 2021-10-16
          • 1970-01-01
          • 1970-01-01
          • 2021-01-17
          • 1970-01-01
          • 2021-11-25
          • 2021-02-05
          相关资源
          最近更新 更多