Forum: Ruby on Rails Hash Sorting

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Sunny B. (Guest)
on 2008-12-26 09:32
Hi,

My hash contain key as a combination of album date created_at and
album_id and values are some photo object.and i need to sort this hash
based on key; but i need to sort it also considering date created_at.
 but if i consider a key as combination of both (date creataed and
album_id) then it is not pure date. how i solve it? any better solution
Joshua A. (Guest)
on 2008-12-26 09:49
Would you mind posting an example of the hash and an example of how you
would like it sorted?

Thanks,
Josh
http://iammrjoshua.com

Sunny B. wrote:
> Hi,
>
> My hash contain key as a combination of album date created_at and
> album_id and values are some photo object.and i need to sort this hash
> based on key; but i need to sort it also considering date created_at.
>  but if i consider a key as combination of both (date creataed and
> album_id) then it is not pure date. how i solve it? any better solution
Sunny B. (Guest)
on 2008-12-26 10:00
Joshua A. wrote:
> Would you mind posting an example of the hash and an example of how you
> would like it sorted?
>
> Thanks,
> Josh
> http://iammrjoshua.com


say i have album id 233 and created date 12/09/2008 so my key should be
12092008_233 in this way?
Jeremy W. (Guest)
on 2008-12-27 18:18
Sunny B. wrote:
> Joshua A. wrote:
>> Would you mind posting an example of the hash and an example of how you
>> would like it sorted?
>>
>> Thanks,
>> Josh
>> http://iammrjoshua.com
>
>
> say i have album id 233 and created date 12/09/2008 so my key should be
> 12092008_233 in this way?

Instead of concatenating a string, just make your key an array of the
values.

hash = {}
key = [date, album_id]
hash[key] = value

However, hashes are not sorted in Ruby 1.8. Rails 2.x has an OrderedHash
that maintains the keys' nsertion order, but it's not efficient for
lookup by key. If you only plan to use the hash for iteration, that's
probably OK (but then why use a hash?).
Frederick C. (Guest)
on 2008-12-27 18:22
(Received via mailing list)
On Dec 27, 4:18 pm, Jeremy Weiskotten <rails-mailing-l...@andreas-
s.net> wrote:
> hash = {}
> key = [date, album_id]
> hash[key] = value
>
> However, hashes are not sorted in Ruby 1.8. Rails 2.x has an OrderedHash
> that maintains the keys' nsertion order, but it's not efficient for
> lookup by key. If you only plan to use the hash for iteration, that's

OrderedHash is a lot speedier in 2.3

Fred
Jeremy W. (Guest)
on 2008-12-27 18:28
Frederick C. wrote:
> On Dec 27, 4:18�pm, Jeremy Weiskotten <rails-mailing-l...@andreas-
> s.net> wrote:
>> hash = {}
>> key = [date, album_id]
>> hash[key] = value
>>
>> However, hashes are not sorted in Ruby 1.8. Rails 2.x has an OrderedHash
>> that maintains the keys' nsertion order, but it's not efficient for
>> lookup by key. If you only plan to use the hash for iteration, that's
>
> OrderedHash is a lot speedier in 2.3
>
> Fred

Good to know, although I'm not even on 2.2 yet due to plugin
incompatibilities. Thanks!
Robby R. (Guest)
on 2008-12-28 18:34
(Received via mailing list)
On Sat, Dec 27, 2008 at 8:28 AM, Jeremy Weiskotten
<removed_email_address@domain.invalid> wrote:
>>> lookup by key. If you only plan to use the hash for iteration, that's
>>
>> OrderedHash is a lot speedier in 2.3
>>
>> Fred
>
> Good to know, although I'm not even on 2.2 yet due to plugin
> incompatibilities. Thanks!
>

Jeremy,

I apologize if this was already considered, but you  *can* sort a hash
by a key/value, but it's not inherently sorted for you.

*
http://www.oreillynet.com/ruby/blog/2005/12/sortin...

Good luck!

Cheers,
Robby

--
Robby R.
Chief Evangelist, Partner

PLANET ARGON, LLC
design // development // hosting

http://www.planetargon.com/
http://www.robbyonrails.com/
aim: planetargon

+1 503 445 2457
+1 877 55 ARGON [toll free]
+1 815 642 4068 [fax]
This topic is locked and can not be replied to.