如何从ruby数组中获取重复元素?

假设我有一个数组[1,2,3,1,5,2]。 这里1和2是重复的元素。 我想得到一个新的数组[1,2]。

我如何在ruby中做到这一点?

arr = [1,2,3,1,5,2] arr.group_by {|e| e}.map { |e| e[0] if e[1][1]}.compact 

相当丑陋……但没有n + 1问题的工作。

 arr = [1,2,3,1,5,2] arr.select { |x| arr.count(x) > 1 } .uniq 

使用reduce的更长解决方案应该更快。

 arr.reduce [{}, []] do |(seen, out), cur| case seen[cur] when :seen then [seen.merge({cur => :added}), out << cur] when :added then [seen, out] else [seen.merge({cur => :seen}), out] end end.last