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.
Ffffcc0a9aa19f979ec1e7a172fca01c?d=identicon&s=25 Suhku Huh (Guest)
on 2006-03-10 23: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
E0d864d9677f3c1482a20152b7cac0e2?d=identicon&s=25 Robert Klemme (Guest)
on 2006-03-10 23:09
(Received via mailing list)
2006/3/10, Suhku Huh <nineclue@gmail.com>:
>     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
Cb48ca5059faf7409a5ab3745a964696?d=identicon&s=25 unknown (Guest)
on 2006-03-10 23:27
(Received via mailing list)
On Sat, 11 Mar 2006, Robert Klemme 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
Ffffcc0a9aa19f979ec1e7a172fca01c?d=identicon&s=25 Suhku Huh (Guest)
on 2006-03-11 00: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.