在数组中查找大多数重复的数字

Rub*_*oli 0 ruby arrays duplicates

我有以下数组

[1, 2, 3, 4, 5, 1, 2, 5, 3, 4, 2, 3, 1, 3, 2, 2]`
Run Code Online (Sandbox Code Playgroud)

我想找出两件事:

1)每个数字有多少重复?

例如:1次,3次,4次,2次等.

2)找到3个最重复的数字array.

例如:[2, 3, 1]由于2 重复5次,3 重复4次,1 重复3次.

我试过了

arr = [1, 2, 3, 4, 5, 1, 2, 5, 3, 4, 2, 3, 1, 3, 2, 2]
= arr.group_by { |e| e }.map { |e| e[0] if e[1][1] }.compact
Run Code Online (Sandbox Code Playgroud)

但结果不是我想要的: [1, 2, 3, 4, 5]

Ale*_*kin 7

? arr.group_by { |e| e } # arr.group_by(&:itself) for Ruby >= 2.2
     .map { |k, v| [k, v.count] } #? [[1, 3], [2, 5], [3, 4], [4, 2], [5, 2]]
     .sort_by { |(_, cnt)| -cnt } #? [[2, 5], [3, 4], [1, 3], [4, 2], [5, 2]]
     .take(3)                     #? [[2, 5], [3, 4], [1, 3]]
     .map(&:first)
#? [2, 3, 1]
Run Code Online (Sandbox Code Playgroud)

删除最后三个子句以获得整个未排序的结果.