我正在执行一个事件记录命令 Product.pluck(:category_id, :price),它返回一个包含 2 个元素的数组:
[
[1, 500],
[1, 100],
[2, 300]
]
我想根据第一个元素进行分组,创建一个如下所示的散列:
{1 => [500, 100], 2 => [300]}
group_by 看起来合乎逻辑,但复制了整个数组。 IE。 a.group_by(&:first) 产生:
{1=>[[1, 500], [1, 100]], 2=>[[2, 300]]}
最佳答案
您可以对其进行二次转换:
Hash[
array.group_by(&:first).collect do |key, values|
[ key, values.collect { |v| v[1] } ]
end
]
或者直接映射逻辑:
array.each_with_object({ }) do |item, result|
(result[item[0]] ||= [ ]) << item[1]
end
关于ruby - 根据第一个元素对数组进行分组,在 Ruby 中没有重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26617201/