[#43857] Hashへの生成順は保障されないのか? — Hiroshi Kasamatsu <qqmn89yb9@...>

こんにちは、笠松と申します。

88 messages 2007/08/18
[#43858] Re: Hashへの生成順は保障されないのか? — Urabe Shyouhei <shyouhei@...> 2007/08/18

Hiroshi Kasamatsu wrote:

[#43862] Re: Hashへの生成順は保障されないのか? — Hiroshi Kasamatsu <qqmn89yb9@...> 2007/08/19

皆さん、早速のレスありがとうございます。

[#43863] Re: Hashへの生成順は保障されないのか? — Urabe Shyouhei <shyouhei@...> 2007/08/19

Hiroshi Kasamatsu wrote:

[#43870] Re: Hashへの生成順は保障されないのか? — Hiroshi Kasamatsu <qqmn89yb9@...> 2007/08/20

Urabeさん、笠松です。レスありがとうございます。

[#43872] Re: Hashへの生成順は保障されないのか? — Urabe Shyouhei <shyouhei@...> 2007/08/20

Hiroshi Kasamatsu wrote:

[#43873] Re: Hashへの生成順は保障されないのか? — cuzic <cuzic@...> 2007/08/20

cuzic です。

[#43874] Re: Hashへの生成順は保障されないのか? — Urabe Shyouhei <shyouhei@...> 2007/08/20

cuzic wrote:

[#43875] Re: Hashへの生成順は保障されないのか? — Tanaka Akira <akr@...> 2007/08/20

In article <46C9E7BB.4060100@ruby-lang.org>,

[#43876] Re: Hashへの生成順は保障されないのか? — Urabe Shyouhei <shyouhei@...> 2007/08/20

おお、田中さんを満足させる説明ってのは結構ハードル高そうだな。

[#43878] Re: Hashへの生成順は保障されないのか? — しん <dezawa@...> 2007/08/20

# 出遅れたので、レスすべきメールが判らなくなってしまったので、手近なのに

[#43879] Re: Hashへの生成順は保障されないのか? — Yukihiro Matsumoto <matz@...> 2007/08/20

まつもと ゆきひろです

[#43887] Re: Hashへの生成順は保障されないのか? — Nobuyoshi Nakada <nobu@...> 2007/08/21

なかだです。

[#43891] Re: Hashへの生成順は保障されないのか? — SASADA Koichi <ko1@...> 2007/08/21

 ささだです。

[#43892] Re: Hashへの生成順は保障されないのか? — Yukihiro Matsumoto <matz@...> 2007/08/21

まつもと ゆきひろです

[#43893] Re: Hashへの生成順は保障されないのか? — Nobuyoshi Nakada <nobu@...> 2007/08/21

なかだです。

[#43899] Re: Hashへの生成順は保障されないのか? — "Akinori MUSHA" <knu@...> 2007/08/21

At Tue, 21 Aug 2007 13:59:43 +0900,

[#43900] Re: Hashへの生成順は保障されないのか? — SASADA Koichi <ko1@...> 2007/08/21

 ささだです。

[#43906] Re: Hashへの生成順は保障されないのか? — "Akinori MUSHA" <knu@...> 2007/08/21

At Tue, 21 Aug 2007 19:29:11 +0900,

[#43921] Re: Hashへの生成順は保障されないのか? — Tanaka Akira <akr@...> 2007/08/22

In article <86sl6dgikh.knu@iDaemons.org>,

[#43926] Re: Hashへの生成順は保障されないのか? — Tanaka Akira <akr@...> 2007/08/23

In article <87zm0kaz60.fsf@fsij.org>,

[#43927] Re: Hashへの生成順は保障されないのか? — Yugui <yugui@...> 2007/08/24

Yuguiといいます。

[#43930] Re: Hashへの生成順は保障されないのか? — Yukihiro Matsumoto <matz@...> 2007/08/24

まつもと ゆきひろです

[ruby-list:43898] Re: Hashへの生成順は保障されないのか?

From: "T.Murayama" <locutus1701e@...>
Date: 2007-08-21 08:06:53 UTC
List: ruby-list #43898
普段は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!! <locutus1701e@gmail.com>


In This Thread