[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

array of hashes (finding value

Nate Leavitt

7/14/2008 9:22:00 PM

I'm just looking for other possible solutions. Sorry, this is kinda a
noob question.

Currently I loop through the array and check the value of each hash key
to find values. Is that the only and/or best way to find matches?

example:

@invoices = [{:id => 1, :first_name => 'nate'}, {:id => 2, :fist_name =>
'greg'}, {:id => 3, :first_name =>}]

@invoices.each do |invoice|
if invoice[:id] == params[:contact_id]
bla... bla...
end
end
--
Posted via http://www.ruby-....

5 Answers

Glen Holcomb

7/14/2008 9:32:00 PM

0

[Note: parts of this message were removed to make it a legal post.]

On Mon, Jul 14, 2008 at 3:22 PM, Nate Leavitt <nateleavitt@gmail.com> wrote:

> I'm just looking for other possible solutions. Sorry, this is kinda a
> noob question.
>
> Currently I loop through the array and check the value of each hash key
> to find values. Is that the only and/or best way to find matches?
>
> example:
>
> @invoices = [{:id => 1, :first_name => 'nate'}, {:id => 2, :fist_name =>
> 'greg'}, {:id => 3, :first_name =>}]
>
> @invoices.each do |invoice|
> if invoice[:id] == params[:contact_id]
> bla... bla...
> end
> end
> --
> Posted via http://www.ruby-....
>
>
With the construct you have there it would be faster to just store the names
in an array at the index corresponding to :id. Although if this is coming
out of Rails that probably isn't a viable option. If you are stuck with
that construct then what you have should work fine. There are probably
faster/more efficient ways though.

--
"Hey brother Christian with your high and mighty errand, Your actions speak
so loud, I can't hear a word you're saying."

-Greg Graffin (Bad Religion)

Nate Leavitt

7/14/2008 9:38:00 PM

0

Glen Holcomb wrote:
> On Mon, Jul 14, 2008 at 3:22 PM, Nate Leavitt <nateleavitt@gmail.com>
> wrote:
>
>>
>> @invoices.each do |invoice|
>> if invoice[:id] == params[:contact_id]
>> bla... bla...
>> end
>> end
>> --
>> Posted via http://www.ruby-....
>>
>>
> With the construct you have there it would be faster to just store the
> names
> in an array at the index corresponding to :id. Although if this is
> coming
> out of Rails that probably isn't a viable option. If you are stuck with
> that construct then what you have should work fine. There are probably
> faster/more efficient ways though.
>
> --
> "Hey brother Christian with your high and mighty errand, Your actions
> speak
> so loud, I can't hear a word you're saying."
>
> -Greg Graffin (Bad Religion)


Thanks for the reply. Yes, I am working in rails :) It just seems
kinda tedious to keep iterating over all these collections. Just
wondering if there is a more efficient way.
--
Posted via http://www.ruby-....

Martin DeMello

7/14/2008 9:47:00 PM

0

On Mon, Jul 14, 2008 at 2:37 PM, Nate Leavitt <nateleavitt@gmail.com> wrote:
>>>
>>> @invoices.each do |invoice|
>>> if invoice[:id] == params[:contact_id]
>>> bla... bla...
>>> end
>
> Thanks for the reply. Yes, I am working in rails :) It just seems
> kinda tedious to keep iterating over all these collections. Just
> wondering if there is a more efficient way.

Where did @invoices come from in the first place? If it came from the
database, you are probably doing things in your loop that you should
be doing in the sql query (e.g. Invoice.find(params[:contact_id])
rather than your if guard in the loop)

martin

Siep Korteling

7/14/2008 10:10:00 PM

0

Nate Leavitt wrote:
> Glen Holcomb wrote:

>> in an array at the index corresponding to :id. Although if this is
>> coming
>> out of Rails that probably isn't a viable option. If you are stuck with
>> that construct then what you have should work fine. There are probably
>> faster/more efficient ways though.

>
>
> Thanks for the reply. Yes, I am working in rails :) It just seems
> kinda tedious to keep iterating over all these collections. Just
> wondering if there is a more efficient way.

invoice_set=@invoices.select{|invoice|invoice[:id]==params[:contact_id]}

invoice_set.each do |invoice|
#stuff with invoice
end

Doubt if it is less work but it feels snappier somehow.

Regards,

Siep
--
Posted via http://www.ruby-....

Nate Leavitt

7/14/2008 10:43:00 PM

0

Martin DeMello wrote:
> On Mon, Jul 14, 2008 at 2:37 PM, Nate Leavitt <nateleavitt@gmail.com>
> wrote:
>>>>
>>>> @invoices.each do |invoice|
>>>> if invoice[:id] == params[:contact_id]
>>>> bla... bla...
>>>> end
>>
>> Thanks for the reply. Yes, I am working in rails :) It just seems
>> kinda tedious to keep iterating over all these collections. Just
>> wondering if there is a more efficient way.
>
> Where did @invoices come from in the first place? If it came from the
> database, you are probably doing things in your loop that you should
> be doing in the sql query (e.g. Invoice.find(params[:contact_id])
> rather than your if guard in the loop)
>
> martin

Yeah... sorry. I actually get the collection through an xml-rpc call :)
which returns the array of hashes.
--
Posted via http://www.ruby-....