Ich habe eine Dictionary<Guid, ElementViewModel>
. (ElementViewModel ist unser eigener komplexer Typ.) Ich füge Artikel zum Wörterbuch mit einem Standard items.Add(Guid.NewGuid, new ElementViewModel() { /*setters go here*/ });
,Gibt es eine Möglichkeit, die Reihenfolge von Elementen in einem Wörterbuch zu verfolgen?
Zu einem späteren Zeitpunkt entferne ich einige oder alle diese Elemente.
Eine vereinfachende Sicht meiner ElementViewModel ist dies:
class ElementViewModel
{
Guid Id { get; set; }
string Name { get; set; }
int SequenceNo { get; set; }
}
Es kann, dass die SequenceNos andere Operationen im Fall nach der Zugabe, in der Sammlung verdichtet werden zu erwähnen, von Bedeutung sein wie das Verschieben und Kopieren statt. {1, 5, 6} -> {1, 2, 3}
Eine vereinfachende Sicht meiner Entfernungsoperation ist:
public void RemoveElementViewModel(IEnumerable<ElementViewModel> elementsToDelete)
{
foreach (var elementViewModel in elementsToDelete)
items.Remove(elementViewModel.Id);
CompactSequenceNumbers();
}
ich das Problem mit einem Beispiel veranschaulichen:
ich hinzufügen 3 Artikel zum Wörterbuch:
var newGuid = Guid.NewGuid();
items.Add(newGuid, new MineLayoutElementViewModel { Id = newGuid, SequenceNo = 1, Name = "Element 1" });
newGuid = Guid.NewGuid();
items.Add(newGuid, new MineLayoutElementViewModel { Id = newGuid, SequenceNo = 2, Name = "Element 2" });
newGuid = Guid.NewGuid();
items.Add(newGuid, new MineLayoutElementViewModel { Id = newGuid, SequenceNo = 3, Name = "Element 3" });
ich entferne 2 Artikel
RemoveElementViewModel(new List<ElementViewModel> { item2, item3 }); //imagine I had them cached somewhere.
Jetzt möchte ich 2 weitere Elemente hinzuzufügen:
newGuid = Guid.NewGuid();
items.Add(newGuid, new MineLayoutElementViewModel { Id = newGuid, SequenceNo = 2, Name = "Element 2, Part 2" });
newGuid = Guid.NewGuid();
items.Add(newGuid, new MineLayoutElementViewModel { Id = newGuid, SequenceNo = 3, Name = "Element 3, Part 2" });
Bei der Auswertung des Wörterbuchs an dieser Stelle ich die Reihenfolge der Elemente erwartet „Element 1“ sein, „Element 2, Teil 2 “, "Element 3, Teil 2"
aber es ist tatsächlich in der folgenden Reihenfolge: "Element 1", "Element 3, Part 2", "Element 2, Teil 2"
Ich verlasse mich auf die Reihenfolge dieser Gegenstände auf eine bestimmte Art und Weise. Warum ist es nicht wie erwartet und was kann ich dagegen tun?
Sicher, ein paar Lesezeichen :) –