【问题标题】:Calculate sum of objects for each unique object property in Ruby计算 Ruby 中每个唯一对象属性的对象总和
【发布时间】:2011-02-07 05:15:28
【问题描述】:

我在 this question 中帮助回答了一个问题,这引发了我自己的问题。

  1. Pie 是一个对象,它有一个由 PiePiece 对象组成的 pieces 数组。
  2. 每个PiePiece 都有一个flavor 属性

如何创建如下所示的哈希:

# flavor => number of pieces
{
  :cherry => 3
  :apple => 1
  :strawberry => 2
}

这可行,但我认为它可以改进

def inventory
  hash = {}
  pieces.each do |p|
    hash[p.flavor] ||= 0
    hash[p.flavor] += 1
  end
  hash
end

有什么想法吗?

【问题讨论】:

    标签: ruby arrays hash enumerable


    【解决方案1】:
    def inventory
      Hash[pieces.group_by(&:flavor).map{|f,p| [f, p.size]}]
    end
    

    【讨论】:

    • 不错。甚至都不知道 group_by 的存在。
    • 这是 Ruby 1.8.7 的新功能。如果使用 1.8.6,只需 require "backports"。顺便说一句,Hash[key_value_pairs] 也是 1.8.7 的新成员
    猜你喜欢
    • 2010-09-11
    • 1970-01-01
    • 2021-01-02
    • 1970-01-01
    • 1970-01-01
    • 2017-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多