假设我有一个数组 [1,2,3,1,5,2]。 这里的1和2是重复的元素。我想得到一个新的数组[1,2]。
在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.group_by { |v| v }.select { |k, v| v.count > 1 }.keys
。该代码段作用为将数组 arr
按元素进行分组,然后选出重复元素组成的组,并返回这些组中的元素。 - d11wtqarr = [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
uniq
。 3)使用参数扩展而不是acc[0]/acc[1]。 - toklandHash
。2)不幸的是不行。请看 [1,1,1]
。3)好点子! - Jan