如何在迭代数组时使用Array#delete?
我有一个数组,我想迭代并删除一些元素。 这不起作用:
a = [1, 2, 3, 4, 5] a.each do |x| next if x < 3 a.delete x # do something with x end a #=> [1, 2, 4]
我想要a
[1, 2]
。 我怎样才能解决这个问题?
a.delete_if { |x| x >= 3 }
在这里查看方法文档
更新:
你可以在块中处理x:
a.delete_if do |element| if element >= 3 do_something_with(element) true # Make sure the if statement returns true, so it gets marked for deletion end end
你不必从数组中删除,你可以过滤它:
a = [1, 2, 3, 4, 5] b = a.select {|x| x < 3} puts b.inspect # => [1,2] b.each {|i| puts i} # do something to each here
我不久前问过这个问题。
在Ruby中迭代时删除?
这不起作用,因为在尝试删除某些内容时,Ruby会退出.each
循环。 如果你只是想从数组中删除东西, delete_if
将会起作用,但是如果你想要更多的控制,那么我在这个线程中的解决scheme就可以工作,尽pipe它有点难看。
另一种方法是使用reject!
,这是可以更清楚的,因为它有一个!
这意味着“这将改变arrays”。 唯一的区别是reject!
如果没有改变,将返回nil
。
a.delete_if {|x| x >= 3 }
要么
a.reject! {|x| x >= 3 }
都将工作正常。