在 Ruby 数组中查找重复项

Sha*_*ikh 3 ruby arrays

我试图在 1 到 1000000 之间的字符串数组中查找重复值。

但是,使用我拥有的代码,我得到的输出是所有条目都加倍了。

例如,如果我有[1,2,3,4,3,4],它会给我输出 3 4 3 4 而不是 3 4。

这是我的代码:

array = [gets]

if array.uniq.length == array.length
  puts "array does not contain duplicates"
else
  puts "array does contain duplicates"
  print array.select{ |x| array.count(x) > 1}
end
Run Code Online (Sandbox Code Playgroud)

另外,每次测试代码时,我都必须将数组定义为array = [1,2,3,4,5,3,5]. 可以puts工作,但当我使用数组 [gets] 时它不会打印。

有人可以帮助我如何解决这两个问题吗?

Car*_*and 5

我多么希望我们有一个内置方法Array#difference:

class Array
  def difference(other)
    h = other.tally
    reject { |e| h[e] > 0 && h[e] -= 1 }
  end
end
Run Code Online (Sandbox Code Playgroud)

不过@user123的答案更直接。(Array#difference可能是两者中更有效的一个,因为它避免了重复调用count。)请参阅我的答案此处以获取该方法的描述及其使用链接。

简而言之,它与Array#-不同,如以下示例所示:

a = [1,2,3,4,3,2,4,2]
b = [2,3,4,4,4]

a - b          #=> [1]
a.difference b #=> [1, 3, 2, 2]
Run Code Online (Sandbox Code Playgroud)

对于目前的问题,如果:

arr = [1,2,3,4,3,4]
Run Code Online (Sandbox Code Playgroud)

重复元素由下式给出:

arr.difference(arr.uniq).uniq
  #=> [3, 4]
Run Code Online (Sandbox Code Playgroud)