Forum: Ruby Question about Hash's initialize

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.
Suhku H. (Guest)
on 2006-03-11 00:00
(Received via mailing list)
I'd like to make a class that behave like a Hash but keeps keys in
created
order.
Followings are some initial testing codes...

class OHash < Hash
  def self.[](*args)
    if (args.size == 1) and args[0].kind_of?(Hash)
      args[0].each_key { |k| puts k}
    else
      args.each_index { |i| puts(a[i]) if (i % 2) == 0 }
    end
    super
  end

  def []=(key, value)
    puts key
    super
  end
end

I'm going to replace puts call to assignment later, and would like to
use
instead of Hash or even override default Hash's methods using alias.
Tests...

> OHash['b'=>2, 'c'=>3, 'a'=>1, 'aa'=>11]
aa
a
b
c
=> {'aa'=>11, 'a'=>1, 'b'=>2, 'c'=>3}
> OHash['b', 2, 'c', 3, 'a', 1, 'aa', 11]
b
c
a
aa

As the code says, argument to class [] method is a already Hash when we
initialize hash form.
Any comments, ideas and test results would be appreciated.

Suhku
Robert K. (Guest)
on 2006-03-11 00:09
(Received via mailing list)
2006/3/10, Suhku H. <removed_email_address@domain.invalid>:
>     end
> instead of Hash or even override default Hash's methods using alias.
> Tests...
>
> > OHash['b'=>2, 'c'=>3, 'a'=>1, 'aa'=>11]

AFAIK there is no way to get this ever to work as you expect since, as
you said, the arguments are transformed into a hash before the method
call.

> Any comments, ideas and test results would be appreciated.

You're not the first one that desires such a beast. If you don't do it
for the fun of it, I'd just check the RAA - I'm sure there is already
a hash that maintains insertion order. Btw, why do you need that?

Kind regards

robert
unknown (Guest)
on 2006-03-11 00:27
(Received via mailing list)
On Sat, 11 Mar 2006, Robert K. wrote:

>>       args.each_index { |i| puts(a[i]) if (i % 2) == 0 }
>> I'm going to replace puts call to assignment later, and would like to use
>
> You're not the first one that desires such a beast. If you don't do it
> for the fun of it, I'd just check the RAA - I'm sure there is already
> a hash that maintains insertion order. Btw, why do you need that?
>
> Kind regards
>
> robert

my alib has an OrderHash class.  anyone's welcome to it for the
stealing.
it's on the raa and rubyforge.


regards.

-a
Suhku H. (Guest)
on 2006-03-11 01:16
(Received via mailing list)
Thanks a lot for helpful comments. I'll check RAA including OrderHash.

Btw, why do you need that?


I would use it implementing some menu structure that varies with user.
May be Array.assoc / rassoc may be used instead but I think Has is more
appropriate if key order is maintained.


regards.
This topic is locked and can not be replied to.