group_by一个属性并映射另一个属性?

时间:2015-08-13 15:16:14

标签: ruby

我有一个具有属性A和B的对象列表。是否有一种单行方式将B值存储在一个循环中按A值分组的数组中? (不是group_by,然后是map)因此,我有一个数组数组。

result[a1] = [b1, b4, b5]

编辑:显然我还不够清楚,抱歉。 我有一个像这样的对象列表:

class MyObject
  attr_accessor :attrA, :attrB
end

并且我喜欢一个获取MyObjects列表的方法,并返回按attrA值分组的所有attrB值。

Kristjan回答很好,如果没有一个班轮这样做,那将是接受的答案

1 个答案:

答案 0 :(得分:1)

双线确定吗?使用默认的空数组值设置结果哈希,然后遍历将所需值连接到所需组中的项目。

list = [
  ['a', 1],
  ['b', 2],
  ['a', 3],
  ['b', 4]
]

result = Hash.new { |h, k| h[k] = [] }
list.each do |item|
  result[item.first] << item.last
end
puts result.inspect
# {"a"=>[1, 3], "b"=>[2, 4]}