Hashへの生成順は保障されないのか?
という件が、まぁMLで話題になっているというのは
話題になっているのかもしれないですが、
ちょっと興味を持ってMLを少し追ってみていたりしました。
個人的には格納した順番で取り出したい、ということは今までになくて、
任意の順番で取り出したいなら、keyをその順番にソートしておけばよく、
Hashで実装されている以上は、
(効率のために)順番を期待するべきでない、という(他言語による)知識があるので、
何もしない状態でHashから「格納順にとりだしたい!」ということがそもそも思いつかなかった。
JavaでもHashMapとLinkedHashMapがあるけど、
LinkedHashMapを使った憶えがない。
ただ、
Rubyは「大クラス主義」
(細かいクラスをたくさんつくるのではなく、便利な少数のクラスをつくる)らしいので、
時間効率、空間効率が許容可能だからこれでいくよっ!
みたいな感じで決めてしまうのが良いのかもなぁ、とか部外者なのに考えた。
Rubyにとっての英断を下す人が誰か、
とか最終的な意志決定権が誰にあるのか知らないけど。
ハッシュエントリひとつあたり2ワードの増加が問題にな
るような局面ではRubyの使用そのものが不適切な可能性が高いと思
います。
まさに、Hashのこれらの効率性が「そこまで」問題になるようなら、
それはRubyの場ではないのだ、と言えてしまうんだなぁ、とかも考えて、
好きにすればいいんじゃないの?(超無責任)
- 今のままでも誰も困らない
- 順序が保証されるようになっても誰も困らない*1
個人的にはどっちに傾いても良いんだけど、
議論が面白いので満足。
*1:ある日突然知らない間に変わらないなら