对一组结构进行分组和计数

时间:2012-08-03 23:08:23

标签: ruby group-by

Ruby noob在这里!

我有一个看起来像这样的结构数组

Token = Struct.new(:token, :ordinal)

因此,这些数组的表格将以表格形式显示:

 Token | Ordinal
 ---------------
    C  | 2
    CC | 3
    C  | 5

我想通过结构的“标记”(即左侧列)进行分组并获得计数,但也保留“序数”元素。所以上面看起来像这样

 Token | Merged Ordinal | Count
 ------------------------------
    C  | 2, 5           | 2
    CC | 3              | 1

请注意,最后一列是分组标记的计数,中间列合并“序数”。第一列(“令牌”)可以包含可变数量的字符,我想对这些字符进行分组。

我尝试了各种方法,使用group_by(我可以得到计数,但不是中间列),注入,迭代(似乎不是很有用)但是我无法正确使用它,部分是因为我不知道我们很好地掌握了Ruby和可用的操作/功能。

我也很好看,所以我没有走得太远。

任何帮助,指针都会非常感激!

1 个答案:

答案 0 :(得分:2)

使用Enumerable#group_by为您进行分组,并使用生成的哈希值来获取您想要的map或类似内容。

structs.group_by(&:token).map do |token, with_same_token|
  [token, with_same_token.map(&:ordinal), with_same_token.size]
end