2009年10月25日

LINQのToDictionaryメソッドの動き

  


というオブジェクトに対して


とやったら、どうなるんだろうか。
試してみたところでは、Value の値でソートされ、その順番を保持して、 Dictionary オブジェクトに変換されているようだけれど、
これは、保障された動きなのだろうか?



この記事へのコメント
何が保障されていることを期待していますか?

Dictionary の Keys プロパティについて言えば、ドキュメント[1]に
「Dictionary<TKey, TValue>.KeyCollection 内のキーの順序は指定されていませんが、……」
とあるので、どんな順番で追加しても、追加した順と取り出す順が
一致することは保障されていません。

BCL の Dictionary 実装では foreach (char key in dict.Keys) でキーを列挙した時
たまたま追加した順で列挙されるように実装されている、ということだと思います。

[1]
http://msdn.microsoft.com/ja-jp/library/yt2fy5zk.aspx
Posted by hzc at 2009年10月26日 01:26
昔書いたコードを読んでいたら、何を勘違いしたのか、
ToDictionaryを呼び出していたので、あれっ?と思ったわけです。

それで、DictionaryとHashtableとの動きの違いをみてみたら、
Dictionaryのほうは順序が保持されてるじゃないですか。

でも、ドキュメントを見たら、順序は保障されないと書いてある、

そういったわけで、確認の意味も含め、どなたかに「保障されていないよ」と
言っていただきたかったものですから、あのような疑問形にしました。

なので、どなたからも反応が無かったらどうしようと思ってました(笑)。
hzcさん、ありがとうございます。

Posted by Gushwell at 2009年10月26日 22:45
 

この記事へのトラックバックURL

http://trackback.blogsys.jp/livedoor/gushwell/51914717