Todavía soy bastante nuevo en C#, pero noté las ventajas de las publicaciones en el foro de usar un HashSet
en lugar de un List
en casos específicos.¿Cuál es el método más rápido/más seguro para iterar sobre un HashSet?
Mi caso actual no es que estoy almacenando una gran cantidad de datos en un único List
, pero en lugar de tener que verificar miembros a menudo.
El problema es que, de hecho, también necesito iterar sobre él, pero el orden en que se almacenan o recuperan realmente no importa.
He leído que para cada uno de los bucles es más lento que para el siguiente, entonces, ¿de qué otro modo podría hacerlo en el método más rápido posible?
El número de comprobaciones de .Contains()
que estoy haciendo definitivamente está perjudicando mi rendimiento con las listas, por lo que al menos en comparación con el rendimiento de HashSet
sería útil.
Editar: Actualmente estoy usando listas, iterando a través de ellas en numerosas ubicaciones, y se está ejecutando código diferente en cada ubicación. En la mayoría de los casos, las listas actuales contienen coordenadas de punto que luego uso para referirme a una matriz bidimensional para que luego haga una operación u otra según los criterios de la lista.
Si no hay una respuesta directa a mi pregunta, está bien, pero supuse que podría haber otros métodos de iteración en un ciclo HashSet
que solo foreach
. Actualmente estoy en la oscuridad en cuanto a qué otros métodos podría haber, qué ventajas ofrecen, etc. Suponiendo que hay otros métodos, también asumí que habría un método de elección preferido típico que solo se ignora cuando no satisface las necesidades (mis necesidades son bastante básicas).
Por lo que respecta a la optimización prematura, ya sé que usar las listas como lo que soy es un cuello de botella. Cómo ayudar a este problema es donde me estoy estancando. Ni siquiera me pegué exactamente, pero no quería volver a inventar la rueda probando repetidamente solo para descubrir que ya lo estoy haciendo de la mejor manera posible (este es un gran proyecto con más de 3 meses invertidos, las listas están en todas partes) , pero definitivamente hay unos que no quiero duplicados, tengo una gran cantidad de datos, no necesito almacenarlos en ningún orden específico, etc.).
¿Qué estás planeando hacer en la iteración? Ejecutar código? ¿Cuenta algo? –
Está optimizando prematuramente. Ahora eso no quiere decir que usted debe ignorar las implicaciones de rendimiento de sus estructuras de datos y el código completo, pero si necesita la semántica de un HashSet continuación, el siguiente paso es que el perfil de la iteración en el contexto de su programa y la forma en que normalmente habrá correr. Si la iteración no es un cuello de botella de rendimiento, entonces continúa, no vale la pena el tiempo. No supongas que será, prueba. –
No sé nada acerca de la respuesta, pero mi convención dice que el método más rápido no será el más seguro y el más seguro suele ser el más rápido. Creo que si un método es el más rápido y el más seguro, entonces no debe haber otros métodos. Puedo estar equivocado. – nawfal