首页 > 解决方案 > Ruby:使用出现限制(?)对哈希进行分组

问题描述

给定下面示例的对象数组。

[
  { group: '1' },
  { group: '1' },
  { group: '1' },
  { group: '2' },
  { group: '1' }
]

预期输出为:

[
  [{ group: '1' }, { group: '1' }, { group: '1' }],
  [{ group: '2' }],
  [{ group: '1' }]
]

重要的是要注意,即使“组 1”出现 4 次,也会有 2 个不同的分组,因为我们也在数组中获取对象的位置......组名称也是任意的。

标签: rubygroup-by

解决方案


Ruby 使用内置函数:Chunk

枚举项目,根据块的返回值将它们分块在一起。

返回相同块值的连续元素被分块在一起。

这看起来正是您想要的:

data
  .chunk{ |item| item[:group] }
  .map{ |_chunk_value, items| items } # chunk gives a pair of the value the chunk used and the values in the chunk, but we only need the values.

推荐阅读