Dictionary.Values
あるアプリケーションのコードを確認したところ、コレクションに要素が追加されたのと同じ順序であると想定されていることがわかりました。
私はこれが本当かどうかをテストするためのアプリケーションを書きました:
using System;
using System.Collections.Generic;
namespace Test
{
class Program
{
static void Main(string[] args)
{
Dictionary<string, int> values = new Dictionary<string, int>();
values.Add("apple2", 2);
values.Add("apple3", 3);
values.Add("apple4", 4);
values.Add("apple5", 5);
values.Add("apple6", 6);
values.Add("apple1", 1);
var list = new List<int>(values.Values);
for (int i = 0; i < list.Count; i++)
{
Console.WriteLine(list[i]);
}
}
}
}
そして出力は次のとおりです。
2
3
4
5
6
1
まず第一に、それはどのように可能であるのだろうか。辞書は順序付けられていないツリーなどを使用することになっているのではありませんか?
さらに、MSDNは次のように述べています。
の値の順序は指定されていませんが、Keysプロパティによって返される
Dictionary<TKey, TValue>.ValueCollection
関連するキーと同じ順序です。Dictionary<TKey, TValue>.KeyCollection
では、なぜMSDNは「順序は指定されていません」と言っているのに、実装はたまたま順序を維持しているのでしょうか。その事実に頼らないほうがいいというのは正しいですか?