计算Ruby数组中相同的字符串元素

时间:2015-01-11 21:04:48

标签: ruby arrays count

我无法找到解决此问题的简单方法

例如我们有一个数组:

["a", "a", "a", "a", "a", "b", "b", "c", "a", "a", "a"]

我需要以这种方式计算相同的元素:

[["a", 5], ["b", 2], ["c", 1], ["a", 3]]

2 个答案:

答案 0 :(得分:4)

使用chunk方法对相同元素进行分组,然后使用map[letter, array]对转换为[letter, count]

arr     = ["a", "a", "a", "a", "a", "b", "b", "c", "a", "a", "a"]
counted = arr.chunk { |x| x }.map { |a, b| [a, b.count] } 
# => [["a", 5], ["b", 2], ["c", 1], ["a", 3]]

答案 1 :(得分:3)

在Ruby 2.2中,您可以使用Enumable#slice_when

arr = ["a", "a", "a", "a", "a", "b", "b", "c", "a", "a", "a"]

arr.slice_when { |e,f| e!=f }.map { |a| [a.first, a.size] }
  #=> [["a", 5], ["b", 2], ["c", 1], ["a", 3]]