2012-03-27 22 views
6

Duplicar posible:
Modifying .NET Dictionary while Enumerating through itBorrado mientras que la iteración en un diccionario

tengo un objeto de diccionario cuando iterar sobre y hacer algunas operaciones. Basado en una condición, debería eliminar o mantener el par de valores clave sobre el que estoy iterando actualmente. ¿Cuál es la mejor manera de borrar un valor clave de un diccionario mientras se itera sobre él? He intentado utilizar un objeto de diccionario separada para realizar un seguimiento de los elementos a eliminar, pero no estoy seguro cómo entonces usarlo para eliminar de mi diccionario principal o si eso es incluso la forma más eficiente de hacerlo

Gracias

Respuesta

9

Mantenga una lista de las claves que desea eliminar a medida que las encuentre. Luego, cuando haya terminado, itere sobre esta lista, llamando al myDictionary.Remove(key) en cada tecla que almacenó.

+5

que significaría 2 iteraciones, una para obtener los archivos para eliminar y otra para eliminar los elementos, ¿por qué no simplemente copiar los elementos que no desea eliminar en el otro diccionario? –

+1

@Euclides - Sinceramente, no había pensado en eso. Sin una razón convincente para terminar con el mismo diccionario, modificado, espero que sea más eficiente en la mayoría de los casos. – Rawling

+1

"¿por qué no simplemente copiar los elementos que no desea eliminar en el otro diccionario?" Si el número de elementos que se espera eliminar son muy pocos o las extracciones son raras veces, esto sería muy deficiente. Entonces, las recomendaciones dependen del patrón de acceso a los datos – Imi

4

intente utilizar un diccionario separado y en lugar de marcar el valor de la clave para borrar los valores de la clave insertar da que desea conservar y en el y de la iteración haga esto: old_map = new_map.

Cuestiones relacionadas