可能重复:
Remove from the array elements that are repeated. in Ruby
我想这样做:
my_array = [1, 1, 2, 2, 3]
my_array_without_duplicates = [3]
调用my_array.uniq
会给我[1, 2, 3]
,这不是我想要的结果。有没有一种有效的方法呢?我现在正在做的事情太难看了。
答案 0 :(得分:2)
my_array.group_by{|e| e}.select{|k,v| v.count == 1}.keys
或
my_array.select{|e| my_array.count(e) == 1}
顺便说一句,你可能意味着my_array = [1, 1, 2, 2, 3]
(括号,而不是大括号)。
答案 1 :(得分:0)
我首先得到输入的直方图(参见Enumerable#frequency或自己编写),然后选择:
require 'facets'
xs = [1, 1, 2, 2, 3]
fs = xs.frequency # {1=>2, 2=>2, 3=>1}
ys = xs.select { |x| fs[x] == 1 } # [3]
Ruby 1.9保持哈希顺序,所以这可能就足够了:
xs.frequency.select { |x, count| count == 1 }.keys # [3]
如果使用Enumerable#map_select
抽象(假设输入中没有nil
s),可以一步编写,如下所示:
xs.frequency.map_select { |x, count| x if count == 1 } # [3]
答案 2 :(得分:0)
我相信这在简单性和效率方面有很好的平衡。只是看起来很长,因为变量名很长。
my_array_without_duplicate = my_array.dup
my_array_without_duplicate.each_with_index {|e, i|
my_array_without_duplicate.delete(e) if my_array_without_dupliate.index(e, i+1)}