追加されたのと同じ順序でDictionary
列挙する方法を探していました。KeyValuePair
さて、Dictionary のドキュメントには、次のことが明確に記載されています。
KeyValuePair<TKey, TValue>
列挙のために、ディクショナリ内の各項目は、値とそのキーを表す構造体として扱われます。アイテムが返される順序は定義されていません。
私が必要としていたOrderedDictionary
のは .
OrderedDictionary od = new OrderedDictionary();
Dictionary<String, String> d = new Dictionary<String, String>();
for (int i = 0; i < 10; i++)
{
od.Add("key" + i, "value" + i);
d.Add("key" + i, "value" + i);
}
System.Console.WriteLine("OrderedDictionary");
foreach (DictionaryEntry de in od) {
System.Console.WriteLine(de.Key + ", " + de.Value);
}
System.Console.WriteLine("Dictionary");
foreach (var tmp in d) {
System.Console.WriteLine(tmp.Key + ", " + tmp.Value);
}
出力:
OrderedDictionary
key0, value0
key1, value1
key2, value2
...
Dictionary
key0, value0
key1, value1
key2, value2
...
ご覧のとおり、どちらも順序付けされており、2 つの疑問が生じます。
Dictionary
値が追加される順序とは異なる順序になるのはどの場合ですか? 最初のforeach
ループは同じ順序で取得することを保証しますKeyValuePair
か、それともインデックスを使用する必要がありますか?