Re: delete_if_with_index or delete_at(array) in 1.8.6?
by James Gray other posts by this author
Jul 2 2009 5:47AM messages near this date
Re: delete_if_with_index or delete_at(array) in 1.8.6?
|
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 <Bil.Kleb@[...].gov>:
> > 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
Thread:
Bil Kleb
David A. Black
Bil Kleb
James Gray
Robert Klemme
James Gray
Robert Klemme
Bil Kleb
Robert Klemme
Bil Kleb
|