On 2007-06-02 10:59:03 +0200, Robert Klemme <shortcutter / googlemail.com> said: > 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 thanks, Robert that's what I was trying to avoid... I was close to Stefano's solution