From: NAKAMURA Akifumi Date: 2007-08-22T00:53:54+09:00 Subject: [ruby-list:43912] Re: Hashへの生成順は保障されないのか? A.nakamuraです。 マニュアル見たんですが、 http://www.ruby-lang.org/ja/man/?cmd=view;name=Hash この冒頭の説明(現時点での)を読んだだけで 「こりゃ順序無いよな」と「わかる」人ってのは、 ハッシュという単語の持つ真の意味を理解してる人で、 わからん人はわからんで終わっちゃうんじゃないでしょうか? Hashという名がアルゴリズムを暗示(どころではないが)してる ということに気づかない人は気づかない。 「連想配列」という言葉も、順序が無いとは言ってないわけで。 (有るとも言ってませんが) んー。ハッシュとは何ぞや、みたいなことも書いたほうがいいのかなあ。 あるいは説明してる外部サイトにリンクしちゃうとか? WikipediaJ:ハッシュテーブル … うーん何だかいきなり濃い話になってるし… rubikitch@ruby-lang.org さんは書きました: > なんといっても => がないとHashという感じがしませんし。 個人的にはどういうわけかHashのあれの「=>」に何年たっても馴染めないでいます。 リテラルで「一発で」書けることには強い魅力は感じますが、 Hashのあのリテラルがどうも好めない。 そこで「一段かまして」書くという妥協を考えたりします。 あるいはHash[key,value,...]と同様の路線で。 で、 OrderedHash[1, "One", 2, "Two"] もそれと似たようなもんかなと思うんで一票。 OrderdHashという名前が長くていやだ!というなら、 aでもなんでもいい(わら)から別名で呼べばいいし。 っていうか、欲しい人が def a(data) HogehogeConntainer.new(data) end って書くってことで良いような気がするんだよなあ。 Ruby本体を一番弄らずに済むのはコレ、でしょうか。 確かに時として、リテラルに直結してるクラスが 「うらやましく」思えることも有るんですが、 「一段かます」つまりコンバートすると考えれば、 まあ妥協の範囲かなと思っています。 Arrayなりなんなりを1つ使い捨てることになりますが、 LLなんだからイイヤンというか(^^;。 そしてリテラルで書くってことは(JSON的に使う場合を除けば) あまり巨大なデータは入れないだろって鯖読んでみたり。 あと、 %m{ x1 => y1, ... } または %m{ x1, y1, ... } みたいに 括弧にPrefixつける(というのでしょうか?)ことで意味を変える、 っていう仕組みをもし(Rubyで書くときに)使えるんだったら、 色々やれそうですね。 #収拾つかなくなる恐れもありますが(^^;