.NET Framework のDictionaryを列挙した時の順番 [日記]
.NET Framework に含まれているDictionary
クラス(ジェネリック版)、JavaでのHashTable
クラスに相当するのかと思ったら、実はLinkedHashMap
の方じゃないかと思えてきた。
理由は単純で、Dictionary
に登録したデータを列挙すると、登録した順番で値を取ってきているっぽいから。
試しに、こんなコードを書いてみました。
var table = new Dictionary<string, int>(); for (int i = 0; i < 100; i++) { table.Add(i.ToString(), i); } foreach (var item in table) { Console.WriteLine(item.Key); }
すると、0, 1, 2, … と表示されます。
コレだけなら、ハッシュ関数が偶々そういう風になっていただけとも取れるので、こんなコードでも試してみました。
var table = new Dictionary<string, int>(); for (int i = 0; i < 100; i++) { table.Add((99 - i).ToString(), i); } foreach (var item in table) { Console.WriteLine(item.Key); }
すると、99, 98, 97, … と表示されます。
こうなってくると、「ハッシュ値が全部同じ」というありえない状況以外、列挙した時のデータの順番は登録した順番になるようになっているとしか思えないのです。
そこで、MSDNを確認してみました。
アイテムが返される順序は未定義です。
そんなわけで、逆コンパイルしてみました。
………。
データの追加しかしないなら、データの列挙順はデータの登録順です。
もっとも、仕様上は「未定義」なのだから、いつなんどき順番が変わるか分かりませんが。
あ、今回確認したのは .NET framework 3.5 です。
タグ:.net
2014-02-09 15:38
nice!(0)
コメント(0)
トラックバック(0)
コメント 0