From: James Gray Date: 2009-07-02T21:47:15+09:00 Subject: Re: delete_if_with_index or delete_at(array) in 1.8.6? On Jul 2, 2009, at 7:45 AM, Robert Klemme wrote: > 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"] You need to reread what Bil was asking for. ;) James Edward Gray II