我试图在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]时,它不打印。
有人能帮我解决这两个问题吗?
4条答案
按热度按时间zqry0prt1#
我多么希望我们有一个内置的方法
Array#difference
:尽管@user123的答案更直接(
Array#difference
可能是两种方法中效率更高的一种,因为它避免了对count
的重复调用)。请参见我的答案here,了解该方法的描述及其使用链接。简而言之,它与Array#不同-如以下示例所示:
对于当前问题,如果:
型
重复元件由下式给出:
eyh26e7m2#
对于第一个问题,需要
uniq
函数,如下所示对于第二个问题,当使用
array = [gets]
接收一个值时,它会将整个数组数字序列作为单个字符串接收,因此所有内容都将像["1, 2 3 4\n"]
一样存储在a[0]
中。3zwjbxry3#
复制此代码在ruby文件和尝试到运行使用
拼音文件名.rb
fsi0uk1n4#
关于你的“得到”问题,
当你执行gets时,你基本上得到了一个字符串作为输入,而不是一个数组。
请看上面的例子,ruby解释器是如何把你所有的元素作为一个字符串,并把它作为一个数组元素放进一个数组中的。所以你需要显式地把输入转换成一个以逗号作为分隔符的数组。下面将回答你的两个问题。