[1, 1, 1, 2, 3].mode
=> 1
['cat', 'dog', 'snake', 'dog'].mode
=> dog
Run Code Online (Sandbox Code Playgroud) 我想Array用一个uniq_elements方法来扩展该类,该方法返回多个为1的元素.我也想在我的新方法中使用闭包uniq.例如:
t=[1,2,2,3,4,4,5,6,7,7,8,9,9,9]
t.uniq_elements # => [1,3,5,6,8]
Run Code Online (Sandbox Code Playgroud)
关闭示例:
t=[1.0, 1.1, 2.0, 3.0, 3.4, 4.0, 4.2, 5.1, 5.7, 6.1, 6.2]
t.uniq_elements{|z| z.round} # => [2.0, 5.1]
Run Code Online (Sandbox Code Playgroud)
既不工作t-t.uniq也不t.to_set-t.uniq.to_set工作.我不关心速度,我在程序中只调用一次,所以它可能很慢.
我有一个类似[1,1,1,2,4,6,3,3]的数组,我想得到重复元素的列表,在本例中为[1,3].我写了这个:
my_array.select{|obj|my_array.count(obj)>1}.uniq
Run Code Online (Sandbox Code Playgroud)
但它的效率很低(o(n²)).你有更好的主意吗?如果可能简洁.
谢谢
我有一个35k元素的数组.我怎样才能有效地找到重复项并返回重复项?
all = [*1..35000, 1]
Run Code Online (Sandbox Code Playgroud)
此解决方案有效:
all.select { |v| all.count(v) > 1 }
Run Code Online (Sandbox Code Playgroud)
但这需要很长时间.
假设我有一个数组[1,2,3,1,5,2].这里1和2是重复的元素.我想得到一个新的数组[1,2].
我如何在红宝石中做到这一点?
要么我不明白从数组中减去一个数组会发生什么,或者这里有什么问题.
我所拥有的是数组中的用户名(字符串)列表:
users.count - users.uniq.count # => 9
users - users.uniq # => []
Run Code Online (Sandbox Code Playgroud)
我不确定这是怎么回事.
我基本上试图找到重复列表.我意识到还有其他方法可以解决这个问题,只是尝试更好地理解阵列操作.
这是我用来获得相同的变通方法代码:
users.inject(Hash.new(0)) {|h,i| h[i] += 1; h}.select{|k,v| v > 1}
Run Code Online (Sandbox Code Playgroud) 我试图在 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] 时它不会打印。
有人可以帮助我如何解决这两个问题吗?