From: "T.Murayama" Date: 2007-08-21T17:06:53+09:00 Subject: [ruby-list:43898] Re: Hashへの生成順は保障されないのか? 普段はROMで忘れた頃に書き込んでる村山です. >ソートの基準を定義するオブジェクトを指定させれば、 >どういう順序にでもできると思います。 ># C++ の std::map の 3 番目のテンプレート引数をイメージしました。 順序づけは可能ですが,意味のない順序付けとなる場合もあると思います. #ダックタイピング的には許容範囲かもしれませんけど. 例えば「都道府県を(北の方から)順番に並べる」場合なども結構厄介ですよ. > 一般化を考えると order を決める Proc を登録して云々、になるんで > しょうか。marshal できなくなるので嫌だ、と言ってる人もいましたが、ど > んなもんですかね。 Java屋の視点でいえば, - Comparableインターフェースを実装して,そのオブジェクト自身に比較させる. - 順序付けをさせる Comparatorオブジェクトを作る. のいずれかですね.Comparableはそのオブジェクト自身が自然な順序付けで比較可能である ことを表します.しかし比較可能でない,例えば値を表すオブジェクトなど以外では, 複数の順序付けが定義可能ということもあって,あまり推奨されていません. なお一般的にはequalsメソッド(同値性比較メソッド.Rubyだと"=="でしたっけ?)との 一貫性が求められます. http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/java/lang/Comparable.html http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/java/util/Comparator.html 同じにする必要はないと思いますが参考までに. ついでに言うとJavaでは ・順序を保存しないHash ・順序を保存する機能付きHash は別々の物として実装するでしょうね.Hashはあくまでハッシュ表. ハッシュ表と異なる物には異なる名前の異なるクラスを用意すると思います. http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/java/util/SortedMap.html そうしないと計算量のオーダーとかが変わっちゃうし,順序付きにする分には問題なくても, 一度「順序付き」と定義してあとから「やっぱしやめた」とするとバージョン間の互換性問題に 発展するので商用のWeb系システムなどでは特に嫌われます. -- I am locutus of Gmail. Resistance is FUTILE!!