在数组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