Ho un Dictionary<Guid, ElementViewModel>
. (ElementViewModel è il nostro tipo complesso.) Aggiungo elementi al dizionario con uno stock standard items.Add(Guid.NewGuid, new ElementViewModel() { /*setters go here*/ });
,C'è un modo per tenere traccia dell'ordine di articoli in un dizionario?
In una fase successiva rimuovo alcuni o tutti questi elementi.
Una visione semplicistica della mia ElementViewModel è questo:
class ElementViewModel
{
Guid Id { get; set; }
string Name { get; set; }
int SequenceNo { get; set; }
}
Può essere significativo ricordare che le SequenceNos vengono compattati all'interno della collezione dopo l'aggiunta, nel caso in cui altre operazioni come lo spostamento e la copia ha avuto luogo. {1, 5, 6} -> {1, 2, 3}
Una visione semplicistica della mia operazione di rimozione è:
public void RemoveElementViewModel(IEnumerable<ElementViewModel> elementsToDelete)
{
foreach (var elementViewModel in elementsToDelete)
items.Remove(elementViewModel.Id);
CompactSequenceNumbers();
}
Illustrerò il problema con un esempio:
aggiungo 3 elementi al dizionario:
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" });
rimuovo 2 articoli
RemoveElementViewModel(new List<ElementViewModel> { item2, item3 }); //imagine I had them cached somewhere.
Ora voglio aggiungere altri 2 articoli:
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" });
Sulla valutazione del dizionario, a questo punto, mi aspettavo l'ordine degli elementi per essere "Element 1", "Element 2, parte 2 ", "Elemento 3, parte 2"
ma in realtà è nel seguente ordine: "Element 1", "Elemento 3, parte 2", "Element 2, Parte 2"
Mi affido all'ordine di questi articoli per essere in un certo modo. Perché non è come previsto e cosa posso fare al riguardo?
Certo, prendi alcuni segnalibri :) –