Ich kann mein ConcurrentDictionary nach Wert wie folgt sortieren:
%Vor%Was großartig ist, außer, dass ich diese neue nachgeordnete Liste als das Wörterbuch einstellen möchte, indem ich das Wörterbuch selbst sortiere, anstatt nur eine Ergebnisliste von sortierten Artikeln zu erhalten.
Ich versuche so etwas zu machen, hatte aber kein Glück - das Wörterbuch ist nach wie vor ungeordnet:
%Vor%Es scheint so zu sein, dass dies keine Auswirkungen auf das Wörterbuch hat. Ich habe auch versucht, das OrderBy-Ergebnis zu einer neuen Var zu transformieren, wobei ich dachte, dass es sich auf den Delegierten auswirken könnte, aber immer noch kein Glück.
Wie kann ich dieses ConcurrentDictionary neu ordnen und dann das Wörterbuch dazu zwingen, das umgeordnete Ergebnis von OrderBy zu sein?
Einfache Wörterbücher sind keine sortierten Sammlungen. Sie sind lediglich eine Sammlung, die Schlüssel zu Werten abbildet. ConcurrentDictionary
ist nicht anders.
Sie benötigen stattdessen SortedConcurrentDictionary
(ähnlich wie SortedDictionary
), Diese Datenstruktur existiert jedoch nicht.
Wenn Sie tatsächlich ein sortiertes "Wörterbuch" benötigen, müssen wir mehr über Ihren Anwendungsfall erfahren. Ist das eine Warteschlange mit falscher Priorität? Könnten Sie einfach eine ConcurrentBag<Proxy>
verwenden und nach der Tat eine Bestellung ausführen?
Wenn Sie die Sammlung und in einer nachgeschalteten parallelen Methode die Proxies in sortierter Reihenfolge verwenden müssen, schlage ich vor, einen Blick auf die Erstellung eines benutzerdefinierte Partitionierer , die möglicherweise aus dem MSDN-Beispiel eines OrderablePartitioner
Ein Wörterbuch, insbesondere ConcurrentDictionary, ist im Wesentlichen unsortiert.
Wenn Sie eine sortierte Auflistung benötigen, müssen Sie die Werte in einem anderen Typ speichern, z. B. in SortedDictionary<T,U>
.
Die Lösung besteht darin, ein SortedSet<T>
zu verwenden, das nach vielen Stunden der Recherche und Code-Überarbeitung gefunden wurde. Ein sortierter Satz bietet die Eindeutigkeit eines Dictionary
oder HashSet
, erlaubt aber auch das Sortieren - weder ein Dictionary
noch ein HashSet
erlauben das Sortieren.
Vielleicht nicht effizient, wenn Sie es oft in einer unveränderlichen Klasse nennen, aber einfach:
%Vor% ConcurrentDictionary
, genau wie Dictionary
, kennt das Sortierkonzept nicht, d. h. es enthält keine Bestellinformationen. Das Ergebnis von OrderBy()
hat eine bestimmte Reihenfolge, aber wenn es Proxies
zugewiesen wird, geht die Bestellungsinformation verloren.
Beachten Sie, dass es sortierte Implementierungen von IDictionary
, nämlich SortedDictionary
und SortedList
, gibt.
Tags und Links c# concurrency parallel-processing c#-4.0 concurrent-programming