假设我有一个数组[1,2,3,1,5,2]。 这里1和2是重复的元素。我想得到一个新的数组[1,2]。
我如何在ruby中做到这一点?
答案 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