2012-03-27 15 views
6

Eventuali duplicati:
Modifying .NET Dictionary while Enumerating through itEliminazione mentre l'iterazione di un dizionario

Ho un oggetto dizionario quando ho iterare e fare alcune operazioni. In base a una condizione, dovrei eliminare o mantenere la coppia di valori chiave in cui sto attualmente effettuando l'iterazione. Qual è il modo migliore per eliminare un keyvaluepair da un dizionario mentre si sta iterando su di esso? Ho cercato di utilizzare un oggetto dizionario separata per tenere traccia degli elementi da eliminare, ma non sono sicuro di come quindi utilizzare ad esso per eliminare dal mio dizionario principale o se questo è anche il modo più efficace per farlo

Grazie

risposta

9

Tieni un elenco delle chiavi che desideri rimuovere come le trovi. Quindi, una volta terminato, eseguire iterazioni su questo elenco, chiamando myDictionary.Remove(key) su ciascuna chiave memorizzata.

+5

che significherebbe 2 iterazioni, una per ottenere i file da eliminare e altro per eliminare gli elementi, perché non copiare semplicemente gli elementi che non si desidera eliminare nell'altro dizionario? –

+1

@Euclides - Onestamente non ci avrei pensato. Senza un valido motivo per finire con lo stesso dizionario, modificato, mi aspetterei che sia più efficiente nella maggior parte dei casi. – Rawling

+1

"perché non copiare semplicemente gli elementi che non vuoi eliminare nell'altro dizionario?" Se il numero di elementi che dovrebbero essere rimossi sono molto pochi o le rimozioni sono raramente, questo sarebbe molto poco efficace. Quindi le raccomandazioni dipendono dal modello di accesso ai dati – Imi

4

provare a utilizzare un dizionario separato e invece di contrassegnare il valore della chiave per eliminare i valori di chiave di inserimento da che si desidera mantenere e al punto e dell'iterazione eseguire: old_map = new_map.