RUBY在循环中删除项目

时间:2015-06-23 14:07:08

标签: arrays ruby

我想删除循环中的项目 我有一个我的类的实例数组,我有时需要从我的数组中删除这些项目

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

任何想法?

2 个答案:

答案 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>]