我有一个具有属性A和B的对象列表。是否有一种单行方式将B值存储在一个循环中按A值分组的数组中? (不是group_by,然后是map)因此,我有一个数组数组。
result[a1] = [b1, b4, b5]
编辑:显然我还不够清楚,抱歉。 我有一个像这样的对象列表:
class MyObject
attr_accessor :attrA, :attrB
end
并且我喜欢一个获取MyObjects列表的方法,并返回按attrA值分组的所有attrB值。
Kristjan回答很好,如果没有一个班轮这样做,那将是接受的答案
答案 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]}