Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 从数组中减去元素_Ruby - Fatal编程技术网

Ruby 从数组中减去元素

Ruby 从数组中减去元素,ruby,Ruby,当减去数组时,我只希望删除第一个匹配项 例如 但我需要: [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] 有什么方法可以做到这一点吗?试试下面的方法,它会对你有用 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,5,5]
另一个例子:

[1,2,3,4,4,4,4,5,5]-[1,2,3,5] # => [4, 4, 4, 4]
但结果应该是:

[4,4,4,4,5]

有什么方法可以做到这一点吗?

试试下面的方法,它会对你有用

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]
用法:

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]                                                                                                                                                                                                                         

您可以不使用不兼容的
拒绝调用它,也可以在方法中添加错误处理。

@Mukhesh我完成了。请检查:)为什么否决投票?哪部分不工作?它经过了很好的测试。Down Voter仔细阅读OP在减去数组时提出的问题我只想删除第一个匹配项。我没有否决你的答案,但我有几点建议:1)你的第一个
a.include?x没有副作用,被丢弃;您可以删除它。2) 您的解决方案无法正确处理第二个数组(您的
a
)具有重复元素的情况,例如
a=[1,4,4,5]
。3) 您对两个数组都进行了变异,这可能并不可取。@Darshan现在,我稍微改变了逻辑。这不是OP给出的,因此我不认为。在这里,我们从不假设发布的任何内容,尝试相应地回答。还是谢谢你的指导。编辑得不错,@RubyLovely。您解决了我提到的前两个问题,第三个问题可能无关紧要。感谢Darshan Computing和RubyLovely的快速回复
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]