ruby - 根据第一个元素对数组进行分组,在 Ruby 中没有重复

标签 ruby arrays grouping

我正在执行一个事件记录命令 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/

相关文章:

java - 如何在java中从包含灰度整数的文件文本中显示图像?

php - 我怎样才能得到这样的数组

dictionary - 戈朗 : group and sum slice of structs

java-8 - Java 8 Stream flatMap 和 group by 代码编译器错误

ruby-on-rails - 是否可以反转类中包含的模块?

ruby-on-rails - ruby on rails has_many(和类似的)是如何实现的?

css - .fields_with_errors 的 Bootstrap 样式不起作用

arrays - 如何在 Angular 2 中使用 TypeScript 过滤数组?

list - scala 列表 LineSegment

ruby-on-rails - Rails 4 真实性 token - 在 header 和表单隐藏输入中?