Szukałem sposobu, aby mój Dictionary
wyliczył jego KeyValuePair
w tej samej kolejności, w jakiej zostały dodane. Teraz Dictionary's doc jasno stwierdzić, że:Polecenie OrderedDictionary i słownik
Dla celów wyliczenia, każdy element w słowniku jest traktowany jako
KeyValuePair<TKey, TValue>
struktury reprezentującej wartość i jego klucz. Kolejność zwracania pozycji jest niezdefiniowana.
I okazało się, że to, co potrzebne było OrderedDictionary
, ale będąc sceptykiem, że jestem, postanowiliśmy spróbować sobie:
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);
}
wyjściowa:
OrderedDictionary
key0, value0
key1, value1
key2, value2
...
Dictionary
key0, value0
key1, value1
key2, value2
...
jak ty widać, oba są uporządkowane, i które podnoszą 2 pytania:
W takim przypadku Dictionary
daje inną kolejność niż ta, w której wartości są dodawane? Czy moja pierwsza pętla foreach
zapewnia odebranie mojej KeyValuePair
w tej samej kolejności lub czy muszę korzystać z indeksu?
spróbuje użyć * * losowe klawisze podczas 'Add'ing do zbiorów i zobaczyć różnicę. – I4V
Tylko dla informacji: @ I4V Próbowałem, a to się nie zmienia. – DeadlyJesus