在数组Ruby中找到一个重复项

我试图在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 

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

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

Array#difference又来了救援。 (我承认@ user123的答案更简单,除非你假装Array#difference已经是一个内置方法。 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] 

有一天,我想把它看成是内置的。

对于目前的问题,如果:

 arr = [1,2,3,4,3,4] 

重复元素由下式给出:

 arr.difference(arr.uniq).uniq #=> [3, 4] 
 puts "Enter array" array = gets.chomp.split(",").map(&:to_i) 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}.uniq end 

将此代码复制到ruby文件中并尝试使用

ruby file_name.rb

对于你的第一个问题,你需要uniq函数

 array.select{ |x| array.count(x) > 1}.uniq 

对于你的第二个问题,当你使用array = [gets]接收一个值时,它会将你的整个数组序列作为单个字符串接收,所以所有内容都将存储在a[0]["1, 2 3 4\n"]

来到你的’获得’问题,

当你做一个获取时,你基本上得到一个字符串作为输入,但不是一个数组。

 2.2.0 :001 > array = [gets] 1,2,1,4,1,2,3 => ["1,2,1,4,1,2,3\n"] 

请参阅上面的示例,ruby解释器如何将所有元素作为单个字符串,并将其作为单个数组元素放入数组中。 因此,您需要使用逗号作为分隔符将输入显式转换为数组。 以下将解决您的问题。

 array = gets.chomp array = array.split(',').map(&:to_i) 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}.uniq! end