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

时间:2011-12-10 18:44:47

标签: ruby-on-rails ruby

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

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

2 个答案:

答案 0 :(得分:12)

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

非常丑陋......但是没有n + 1问题的工作。

答案 1 :(得分:4)

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