Ein SorteDictionary wird nach MSDN nach dem Schlüssel sortiert. Bedeutet das, dass Sie sicher sein können, dass es sortiert wird, wenn Sie es in einer foreach aufzählen? Oder bedeutet es nur, dass das SortedDictionary intern so funktioniert, dass es in verschiedenen Fällen bessere Leistung bringt?C#: Wird ein SortedDictionary beim Aufzählen sortiert?
Antwort
Wenn Sie die Auflistung auflisten, wird sie nach Schlüsseln sortiert (selbst wenn Sie die Values
Auflistung aufzählen). Intern wird die Sammlung als binärer Suchbaum implementiert (gemäß der Dokumentation). Sowohl das Einfügen als auch das Nachschlagen von Werten ist O (log n) (was bedeutet, dass sie ziemlich effizient sind).
Ja, genau das ist es.
Edit: der Teil, der sagt "Bedeutet das, dass Sie sicher sein können, dass es sortiert wird, wenn Sie es in einer foreach aufzählen?"
Das Wörterbuch in einem sortierte gehalten, um einen internen Baum verwendet wird. Jedes neue Element wird an der korrekten Sortierposition positioniert, und der Baum wird angepasst, um die Sortierreihenfolge beizubehalten, wenn ein Element entfernt wird. Während aufgelistet wird, wird die Sortierreihenfolge beibehalten.
Wenn Sie die Elemente in einem SortedDictionary
auflisten, werden die Elemente in der Sortierreihenfolge der Elementschlüssel zurückgegeben. Und wenn Sie mit den Schlüsseln im SortedDictionary
aufzählen, werden die Schlüssel auch in sortierter Reihenfolge zurückgegeben. Und vielleicht etwas überraschend, wenn Sie die SortedDictionary
durch seine Werte auflisten, werden die Werte in der Sortierreihenfolge der Schlüssel, nicht die Sortierreihenfolge der Werte zurückgegeben, wie Sie erwarten können.
Demonstration:
Beachten Sie, dass die Elemente in dieser Demo zum SortedDictionary
hinzugefügt sind nicht in sortierter Reihenfolge hinzugefügt.
Auch, wenn Sie durch ihre Werte Ihr Wörterbuch aufzuzählen planen und es gibt eine Möglichkeit, doppelte Werte, betrachten Sie Ihre Reverse-Lookup-Funktion return an IEnumerable<T> mit. (Natürlich für große Wörterbücher, sucht einen Schlüssel durch seinen Wert kann bis zu einer schlechten Leistung zur Folge hat.)
using System;
using System.Collections.Generic;
using System.Linq;
class SortedDictionaryEnumerationDemo
{
static void Main()
{
var dict = new SortedDictionary<int, string>();
dict.Add(4, "Four");
dict.Add(5, "Five");
dict.Add(1, "One");
dict.Add(3, "Three");
dict.Add(2, "Two");
Console.WriteLine("== Enumerating Items ==");
foreach (var item in dict)
{
Console.WriteLine("{0} => {1}", item.Key, item.Value);
}
Console.WriteLine("\n== Enumerating Keys ==");
foreach (int key in dict.Keys)
{
Console.WriteLine("{0} => {1}", key, dict[key]);
}
Console.WriteLine("\n== Enumerating Values ==");
foreach (string value in dict.Values)
{
Console.WriteLine("{0} => {1}", value, GetKeyFromValue(dict, value));
}
}
static int GetKeyFromValue(SortedDictionary<int, string> dict, string value)
{
// Use LINQ to do a reverse dictionary lookup.
try
{
return
(from item in dict
where item.Value.Equals(value)
select item.Key).First();
}
catch (InvalidOperationException e)
{
return -1;
}
}
}
Ausgang Erwartet:
== Enumerating Items ==
1 => One
2 => Two
3 => Three
4 => Four
5 => Five
== Enumerating Keys ==
1 => One
2 => Two
3 => Three
4 => Four
5 => Five
== Enumerating Values ==
One => 1
Two => 2
Three => 3
Four => 4
Five => 5
- 1. Wie wird SortedDictionary in C# ordnungsgemäß verwendet?
- 2. .NET SortedDictionary Aber nach Werten sortiert
- 3. SortedDictionary (C#) - Wert ändern
- 4. F # Entsprechung von SortedDictionary aus C#
- 5. Sortiertes Wörterbuch sortiert nach Wert in C# (LRU-Cache)
- 6. Vermeiden Sie doppelten Code in SortedDictionary C#
- 7. Ändern von .NET-Wörterbuch beim Aufzählen durch
- 8. Wie wird ein gefülltes Dokument in der Suchanforderung sortiert?
- 9. Sortierte Liste beim Binden nicht sortiert
- 10. Wie wird ein Flex-Datagrid nach mehreren Spalten sortiert?
- 11. Wie wird mit Data.Vector.Generic.Mutable sortiert?
- 12. Wie wird mit Realm sortiert?
- 13. Mitglieder einer Struktur aufzählen?
- 14. SelectList wird überhaupt nicht sortiert
- 15. Wie wird NameValueCollection mit einem Schlüssel in C# sortiert?
- 16. Wie wird die datengebundene DataGridView-Spalte sortiert?
- 17. Outlook-Ordner aufzählen wollen
- 18. Warum wird ein String O (n log n) sortiert?
- 19. Wie wird eine 3G-Byte-Zugriffsprotokolldatei sortiert?
- 20. wird immer intern sortiert die resultierenden Datenrahmen
- 21. Wie man ein NSMutableArray in Objective-C dynamisch sortiert?
- 22. Objective-C, sortiert ein Array von Strings Zahlen
- 23. Wie wird ein Teil eines Arrays mit Int64-Indizes in C# sortiert?
- 24. Aufzählen Outlook ContactItem Eigenschaften
- 25. Aufzählen Sätze in Python
- 26. Aufzählen von Dateien Bestellen von Nummerierte Dateinamen C#
- 27. Wie benutzerdefinierte IComparer für SortedDictionary verwenden?
- 28. Aufzählen von zwei Sammlungen
- 29. SQL SMO Tabellen nicht aufzählen
- 30. Gibt es ein Programm zum Aufzählen von Fenstern?
Welche von ihnen? : p – Svish
Ist garantiert, dass es sortiert ist? (im Vergleich zu dem regulären Wörterbuch, wo es nicht ist) – Svish