从数组Ruby中删除元素

Mic*_*ael 60 ruby arrays

假设我试图从数组中删除元素a = [1,1,1,2,2,3].如果我执行以下操作:

b = a - [1,3]
Run Code Online (Sandbox Code Playgroud)

然后我会得到:

b = [2,2]
Run Code Online (Sandbox Code Playgroud)

但是,我想要结果

b = [1,1,2,2]
Run Code Online (Sandbox Code Playgroud)

即我只删除减法向量中每个元素的一个实例,而不是所有情况.Ruby中有一种简单的方法可以做到这一点吗?

小智 74

你可能会这样做:

a= [1,1,1,2,2,3]
delete_list = [1,3]
delete_list.each do |del|
    a.delete_at(a.index(del))
end
Run Code Online (Sandbox Code Playgroud)

结果:[1,1,2,2]

  • 如果你想删除`delete_list`中的所有项目实例,你可以这样做.`b = a.each.reject {| x | delete_list.each.include?X}` (2认同)
  • @moopasta,因为他从数组的开头到结尾删除了第一个出现的1和3。他实际上是在调用delete_at,它先删除了Array的索引,并首先出现了1,然后删除了3。因此,在这种情况下,他先发出a.delete_at(0)然后发出a.delete_at(4 ) (2认同)

zet*_*tic 5

[1,3].inject([1,1,1,2,2,3]) do |memo,element|
  memo.tap do |memo|
    i = memo.find_index(e)
    memo.delete_at(i) if i
  end
end
Run Code Online (Sandbox Code Playgroud)