当减去数组时,我只想要移除第一个匹配项。数组中的摘要元素
E.g.
[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]
有没有办法做到这一点?
当减去数组时,我只想要移除第一个匹配项。数组中的摘要元素
E.g.
[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
或者叫它为该方法添加错误处理。
感谢Darshan Computing – Mukesh 2013-04-11 10:42:27
请尝试以下操作,它将为您工作。
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]
为什么降票?哪部分不工作?它测试良好。 ** Down-Voter **仔细阅读OP询问的内容**当减去数组时,我只希望删除第一个匹配**。 – 2013-04-11 07:42:53
我没有对你的答案投下赞成票,但我确实有几点建议:1)你的第一个'a.include? x;'没有副作用并被丢弃;你可以删除它。 2)您的解决方案无法正确处理第二个数组(您的'a')具有重复元素的情况,例如'a = [1,4,4,5]'。 3)你改变这两个数组,这可能是不可取的。 – 2013-04-11 07:53:02
@DarshanComputing现在看,我有点改变了逻辑。这不是OP给的,因此没有想到。在这里,我们永远不会假设发布什么,试图相应地回答。仍然感谢您的指示。 – 2013-04-11 08:04:47
@Mukhesh我完成了。请检查:) – 2013-04-11 07:39:51