我已经看到很多关于此的问题,但没有解决重复值问题的问题。
下面是两个数组。无论多余的重复内容,我都需要验证ary2
中是否包含ary1
。无论数组是否包含数字或字符,也需要工作。
ary1 = [1, 1, 1, 2, 2, 3, 4, 5, 6]
ary2 = [1, 1, 2, 3, 5]
应该等于[1, 1, 2, 3, 5]
,我的代码等于[1, 1, 1, 2, 2, 3, 5]
尝试了很多选项,包括keep_if
或keep_at
,delete_if
或delete_at
,slice
,map
等。
当前代码:
ary1.keep_if { |x| ary2.include?(x) }
答案 0 :(得分:3)
验证ary2是否包含在ary1中
(ary2 - ary1).empty?
应该等于
[1, 1, 2, 3, 5]
ary2.select { |e| ary1.include?(e) }
答案 1 :(得分:0)
在行之间阅读,我假设&{34; ary2
包含在<{1}}&#34;意味着,对于ary1
的每个元素,ary2
的唯一元素具有相同的值。通过&#34; unique&#34;我的意思是,例如,如果ary1
包含两个ary2
,则1
必须包含两个或更多ary1
个。1
。如果对问题的解释不正确,则没有理由进一步阅读。
如果我的假设是正确的,我们可以构建一个方法(带有参数ary1
和ary2
),返回true
或false
,但是如果匹配( true
)返回剩余的ary1
元素可能更有用。在ary1
的元素与ayr2
的元素匹配后。
def ary2_included_in_ary1?(ary1, ary2)
ary1_cpy = ary1.dup
ary2.all? do |n|
idx = ary1_cpy.index n
return false if idx.nil?
ary1_cpy.delete_at(idx)
end
ary1_cpy
end
ary1 = [1, 1, 1, 2, 2, 3, 4, 5, 6]
ary2 = [1, 1, 2, 3, 5]
ary2_included_in_ary1?(ary1, ary2)
#=> [1, 2, 4, 6]
ary2 = [1, 1, 2, 3, 7]
ary2_included_in_ary1?(ary1, ary2)
#=> false