减去数组时,我只想删除第一个匹配项。
例如
[1,2,3,4,4,4,4,5,5]-[1,2,3,4] # => [5,5]
但是我需要:
[4,4,4,5,5]
另一个例子:
[1,2,3,4,4,4,4,5,5]-[1,2,3,5] # => [4, 4, 4, 4]
但结果应该是:
[4,4,4,4,5]
有没有办法做到这一点?
减去数组时,我只想删除第一个匹配项。
例如
[1,2,3,4,4,4,4,5,5]-[1,2,3,4] # => [5,5]
但是我需要:
[4,4,4,5,5]
另一个例子:
[1,2,3,4,4,4,4,5,5]-[1,2,3,5] # => [4, 4, 4, 4]
但结果应该是:
[4,4,4,4,5]
有没有办法做到这一点?
def remove(array, rejects)
array = array.dup
rejects.each {|item| array.delete_at(array.index(item))}
array
end
用法:
remove([1,2,3,4,4,4,4,5,5], [1,2,3,4])
=> [4, 4, 4, 5, 5]
remove([1,2,3,4,4,4,4,5,5], [1,2,3,5])
=> [4, 4, 4, 4, 5]
您可以不使用不兼容rejects
的方式调用它,也可以向该方法添加错误处理。
试试下面的,它会为你工作。
a = [1,2,3,5]
p [1,2,3,4,4,4,4,5,5].delete_if {|x| a.delete_at(a.index(x)) if a.include? x}
#=> [4, 4, 4, 4, 5]
a = [1,2,3,4]
p [1,2,3,4,4,4,4,5,5].delete_if {|x| a.delete_at(a.index(x)) if a.include? x}
#=> [4, 4, 4, 5, 5]
这里还有一些例子来澄清反对者:
a = [1,2,3,5]
p [3,4,5,1,2,3,4,4,4,4,5,5].delete_if {|x| a.delete_at(a.index(x)) if a.include? x}
#=> [4, 3, 4, 4, 4, 4, 5, 5]
a = [1,2,4,5]
p [3,4,5,1,2,3,4,4,4,4,5,5].delete_if {|x| a.delete_at(a.index(x)) if a.include? x}
#=> [3, 3, 4, 4, 4, 4, 5, 5]
a = [2,3,5]
p [3,4,5,1,2,3,4,4,4,4,5,5].delete_if {|x| a.delete_at(a.index(x)) if a.include? x}
#=>[4, 1, 3, 4, 4, 4, 4, 5, 5]
a = [1,4,4,5]
p [1,2,3,4,4,4,4,5,5].delete_if {|x| a.delete_at(a.index(x)) if a.include? x}
#=> [2, 3, 4, 4, 5]