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