From: Robert Klemme Date: 2009-07-02T21:45:20+09:00 Subject: Re: delete_if_with_index or delete_at(array) in 1.8.6? 2009/7/2 Bil Kleb : > Hi, > > Given an array of integers, I need to delete all those > entries that are lower than the current array index. > > I first thought of the non-existent, > >  array.delete_if_with_index{ |e,i| e < i } > > then, > >  remove_indices = [] >  array.each_with_index{ |e,i| remove_indices << i if e < i } >  array.delete_at( remove_indices ) > > or the same, but with a fictious inject_with_index, > >  remove_indices = inject_with_index([]){|acc,e,i| acc << i if e < i } >  array.delete_at( remove_indices ) > > and finally the 1.9 possibility, > >  array.map_with_index!{ |e,i| e < i ? nil : e }.compact! > > before compromising with > >  array = (0...array.size).zip(array).map{ |i,e| e < i ? nil : e }.compact > > Anything more elegant available? > > Or perhaps an alternative way to attack the problem? irb(main):010:0> a = %w{foo bar baz} => ["foo", "bar", "baz"] irb(main):011:0> current = 1 => 1 irb(main):012:0> a.slice! 0...current => ["foo"] irb(main):013:0> a => ["bar", "baz"] Kind regards robert -- remember.guy do |as, often| as.you_can - without end http://blog.rubybestpractices.com/