我有一个数组,我想要迭代它并删除其中的一些元素。这不起作用:
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]
。我怎么才能避免这个问题呢?
发布于 2010-07-16 06:55:44
a.delete_if { |x| x >= 3 }
请参见方法文档here
更新:
您可以在块中处理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
发布于 2010-07-16 07:24:11
你不必从数组中删除,你可以这样过滤它:
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
发布于 2010-07-16 06:56:13
不久前我问过这个问题。
Deleting While Iterating in Ruby?
它不工作,因为当试图删除一些东西时,Ruby退出了.each
循环。如果你只是想从数组中删除一些东西,delete_if
可以工作,但如果你想要更多的控制,我在那个线程中的解决方案是有效的,尽管它有点丑陋。
https://stackoverflow.com/questions/3260686
复制相似问题