From: Robert Klemme Date: 2007-06-02T18:00:35+09:00 Subject: Re: Array index of first bigger number... On 02.06.2007 09:30, Josselin wrote: > Is there a simple function (I solve it w a loop.. C-minded) to find the > index of the first bigger element in an array > > limit mini is first_element , if item < last_element > item = -2.23 > anArray = [0.0, 2.0, 5.0, 10.0, 15.0, 25.0] first_bigger_element = > 0.0 index 0 > > item = 2.85 > anArray = [0.0, 2.0, 5.0, 10.0, 15.0, 25.0] first_bigger_element = > 5.0 index 2 > > item = 12.55 > anArray = [0.0, 2.0, 5.0, 10.0, 15.0, 25.0] first_bigger_element = > 15.0 index 4 > > limit maxi is last_element , if item > last_element > item = 36.59 > anArray = [0.0, 2.0, 5.0, 10.0, 15.0, 25.0] first_bigger_element = > 25.0 index 5 > > can it be writtent in just one line or a loop is unavoidable ? Yes, it can. Just use Enumerator. irb(main):001:0> anArray = [0.0, 2.0, 5.0, 10.0, 15.0, 25.0] => [0.0, 2.0, 5.0, 10.0, 15.0, 25.0] irb(main):007:0> anArray.to_enum(:each_with_index).find {|n,i| n > 30} => nil irb(main):008:0> anArray.to_enum(:each_with_index).find {|n,i| n > 10} => [15.0, 4] irb(main):009:0> anArray.to_enum(:each_with_index).find {|n,i| n > -2.23} => [0.0, 0] irb(main):010:0> val, idx = anArray.to_enum(:each_with_index).find {|n,i| n > -2.23} => [0.0, 0] irb(main):011:0> val => 0.0 irb(main):012:0> idx => 0 This also has the advantage of having to traverse the array just once vs. the solution Stefano presented. Kind regards robert