On Fri, 09 Dec 2005 21:48:24 +0900, Steve Litt wrote: > On Friday 09 December 2005 05:57 am, Ross Bamford wrote: >> Hi, >> >> I have a couple more questions. Hopefully they're not so dumb this time. >> >> 1) I need a hash that maintains insertion order. In Java, I'd use >> LinkedHashMap. Does Ruby have one? > > I've only done Ruby for 9 days now, but from the reading I've done, no. It > would be easy enough to insert the key in an array at the same time you > insert the key=>value in a hash. You could even make a class that does it all > for you. > (I'm a relative newbie too :) And just loving Ruby more and more!) I think I found something in facets that does the trick, but I've not gotten to looking at it yet so I'm not certain. But anyway, I think a variant of your suggestion is more suitable. > Perhaps there's a better way, but that's one I'm sure would work. > > By the way, why do you need initial insertion order? Do you ever need to look > up by the key value? If not, why not use an array of hashes, or an array of 2 > element arrays? > The idea was to make a Hash that accepted Regex keys, but allowed you to look for them by a string, using backrefs in the value: class RxHash < Hash def [](key) md = nil if v = self.detect { |k,v| md = /^#{k}$/.match(key) } v[1].gsub(/\$(\d)/) { md[$1.to_i] } end end end You can then have mappings like /123([a-z]+)/ => '321$1'. It was for mapping file extensions. It works, but if there are multiple matches you get one pretty much at random. Thinking more on it, though, I see that the Hash is probably leading me down the wrong path anyway, it's better done with arrays as you suggest. I think I can have an array of two element arrays and use 'map' for easy access. Thanks for the reply, Ross -- Ross Bamford - rosco / roscopeco.remove.co.uk "\e[1;31mL"