Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Ruby > Array index of first bigger number...

Reply
Thread Tools

Array index of first bigger number...

 
 
Josselin
Guest
Posts: n/a
 
      06-02-2007
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 ?

thanks

joss

 
Reply With Quote
 
 
 
 
Stefano Crocco
Guest
Posts: n/a
 
      06-02-2007
Alle sabato 2 giugno 2007, Josselin ha scritto:
> 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 ?
>
> thanks
>
> joss


You can do:

anArray.index(anArray.find{|i| i > item})

anArray.find will return the first element of the array for which the block
returns true, i.e the first element which is greater than item; then
anArray.index will return the index of the item. (This returns nil if no
element in the array is greater than item)

I hope this helps

Stefano

 
Reply With Quote
 
 
 
 
Robert Klemme
Guest
Posts: n/a
 
      06-02-2007
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
 
Reply With Quote
 
Josselin
Guest
Posts: n/a
 
      06-02-2007
On 2007-06-02 10:59:03 +0200, Robert Klemme <(E-Mail Removed)> 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

 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Making an array wrap, where last index + 1 = first index Shawn W_ Ruby 5 09-16-2009 02:45 PM
sorting index-15, index-9, index-110 "the human way"? Tomasz Chmielewski Perl Misc 4 03-04-2008 05:01 PM
Serialization file getting bigger and bigger on the same object yancheng.cheok@gmail.com Java 2 04-10-2007 09:26 AM
pasting numpy array into bigger array TG Python 3 07-26-2006 04:32 PM
App getting bigger and bigger Yannick Turgeon Perl Misc 1 10-14-2003 04:47 AM



Advertisments