On Sun, 05 Feb 2006 14:41:21 -0000, jonT <j / Tippell.com> wrote:

> I'd like to propose a new addition to the enum module.
>
> detect works great but doesn't supply the index of the match. It would
> be nice to have a method detect_index that returned the index rather
> than the object.
>
> Use example:
>
> irb(main):001:0> foo =`uptime`.strip.split(' ')
> => ["14:36:06", "up", "157", "days,", "16:59,", "35", "users,", "load",
> "average:", "0.54,", "0.31,", "0.27"]
> irb(main):002:0> bar=nil
> => nil
> irb(main):003:0> foo.each_with_index {|o,i| if o=="users,"; bar=i;
> break; end;}
> => nil
> irb(main):004:0> foo[2..bar-2]
> => ["157", "days,", "16:59,"]
>
> Lines 2 to 4 would be expressed in a much more concise manner, i.e.
>
> irb(main):001:0> foo =`uptime`.strip.split(' ')
> => ["14:36:06", "up", "157", "days,", "16:59,", "35", "users,", "load",
> "average:", "0.54,", "0.31,", "0.27"]
> irb(main):002:0> foo[2..foo.detect_index {|o| o=="users,"}-2]
> => ["157", "days,", "16:59,"]
>

For this case, this might work?

	foo[2..foo.index("users,")-2]
	# => ["1", "day,", "14:18,"]

More generally, I'd personally like a block on 'index', such that:

	foo.index("users,")
	# => 6

	foo.index { |s| s == "users," }
	# => 6

Just MHO.

-- 
Ross Bamford - rosco / roscopeco.remove.co.uk