gpt4 book ai didi

ruby - 确定一个数组是否包含另一个数组的所有元素

转载 作者:数据小太阳 更新时间:2023-10-29 06:44:11 27 4
gpt4 key购买 nike

我需要判断一个数组是否包含另一个数组的所有元素,有重复项

[1,2,3].contains_all? [1,2]   #=> true
[1,2,3].contains_all? [1,2,2] #=> false (this is where (a1-a2).empty? fails)
[2,1,2,3].contains_all? [1,2,2] #=> true

因此第一个数组必须包含与第二个数组中每个唯一元素一样多或相等的数量。

This question answers it for those using an array as a set ,但我需要控制重复项。

更新:基准

在 Ruby 1.9.3p194 上

def bench
puts Benchmark.measure {
10000.times do
[1,2,3].contains_all? [1,2]
[1,2,3].contains_all? [1,2,2]
[2,1,2,3].contains_all? [1,2,2]
end
}
end

结果:

Rohit   0.100000   0.000000   0.100000 (  0.104486)
Chris 0.040000 0.000000 0.040000 ( 0.040178)
Sergio 0.160000 0.020000 0.180000 ( 0.173940)
sawa 0.030000 0.000000 0.030000 ( 0.032393)

更新 2:更大的数组

@a1 = (1..10000).to_a
@a2 = (1..1000).to_a
@a3 = (1..2000).to_a

def bench
puts Benchmark.measure {
1000.times do
@a1.contains_all? @a2
@a1.contains_all? @a3
@a3.contains_all? @a2
end
}
end

结果:

Rohit    9.750000   0.410000  10.160000 ( 10.158182)
Chris 10.250000 0.180000 10.430000 ( 10.433797)
Sergio 14.570000 0.070000 14.640000 ( 14.637870)
sawa 3.460000 0.020000 3.480000 ( 3.475513)

最佳答案

class Array
def contains_all? other
other = other.dup
each{|e| if i = other.index(e) then other.delete_at(i) end}
other.empty?
end
end

关于ruby - 确定一个数组是否包含另一个数组的所有元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13553822/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com