我试图在 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] 时它不会打印。
有人可以帮助我如何解决这两个问题吗?
我多么希望我们有一个内置方法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)