我想删除循环中的项目 我有一个我的类的实例数组,我有时需要从我的数组中删除这些项目
class Test
attr_reader :to_del
def initialize(str)
@to_del = str
end
end
tab = Array.new
a = Test.new(false)
b = Test.new(true)
c = Test.new(false)
tab.push(a)
tab.push(b)
tab.push(c)
for l in tab
if l.to_del == true
l = nil
end
end
p tab
任何想法?
答案 0 :(得分:2)
对于原地删除:
tab.reject! { |l| l.to_del }
只返回一个清除的数组:
tab.reject &:to_del
整个代码都是php-smelled。我会选择:
tab = (1..3).map { [true,false].sample }.map { |e| Test.new e }
tab.reject &:to_del
答案 1 :(得分:1)
您可以使用Array#delete_if
。
检查出来:
tab
#=> [#<Test:0x00000007548768 @to_del=false>, #<Test:0x000000074ea348 @to_del=true>, #<Test:0x000000074b21a0 @to_del=false>]
tab.delete_if {|x| x.to_del}
#=> [#<Test:0x00000007548768 @to_del=false>, #<Test:0x000000074b21a0 @to_del=false>]