From: Karsten Meier Date: 2004-03-31T07:24:23+09:00 Subject: Re: [newbie] linked hash Making a subclass of a standard class like Hash can be dangerous, you should verify that it works for all methods, otherwise you may get surprises: h = OrderedHash.new h['key1'] = 1 h['key2'] = 2 h.delete('key1') Now 'key1' is still in the '@ordered_keys' array, and methods like 'keys' and 'each' will give you wrong results. Regards Karsten Meier > > no ordered only as it is entered, in the mean time i've found a solution > : > > # OrderedHash.rb > > class OrderedHash < Hash > > VERSION = "2004-03-28" > > def []=( key, value ) > ( @ordered_keys ||= [] ) << key unless has_key?( key ) > super > end > > def each > @ordered_keys.each do | key | > yield key, fetch( key ) > end if @ordered_keys > end > > def keys > a = Array.new > @ordered_keys.each do | key | > a << key > end if @ordered_keys > return a > end > > def join_keys(s) > return self.keys.join(s) > end > > def values > a = Array.new > @ordered_keys.each do | key | > a << fetch(key) > end if @ordered_keys > return a > end > > def join_values(s) > return self.values.join(s) > end > > end >