He estado trabajando con una string[]
matriz en C # que se devuelve de una llamada de función. Posiblemente podría enviar a una Generic
colección, pero me preguntaba si había una mejor manera de hacerlo, posiblemente utilizando una matriz temporal.
¿Cuál es la mejor manera de eliminar duplicados de una matriz C #?
c#
arrays
duplicates
lomaxx
fuente
fuente
Respuestas:
Posiblemente podría usar una consulta LINQ para hacer esto:
fuente
.Distinct(StringComparer.OrdinalIgnoreCase)
para obtener un conjunto distinto de cadenas que no distingue entre mayúsculas y minúsculas.The Distinct() method returns an unordered sequence that contains no duplicate values.
Aquí está el enfoque HashSet <string> :
Desafortunadamente, esta solución también requiere .NET Framework 3.5 o posterior, ya que HashSet no se agregó hasta esa versión. También podría usar array.Distinct () , que es una característica de LINQ.
fuente
El siguiente código probado y de trabajo eliminará los duplicados de una matriz. Debe incluir el espacio de nombres System.Collections.
Puede resumir esto en una función si lo desea.
fuente
Si necesita ordenarlo, puede implementar un orden que también elimine los duplicados.
Mata dos pájaros de un tiro, entonces.
fuente
Esto puede depender de cuánto desea diseñar la solución: si la matriz nunca será tan grande y no le importa ordenar la lista, puede intentar algo similar a lo siguiente:
fuente
- Esta es la pregunta de entrevista que se hace cada vez. Ahora hice su codificación.
fuente
Esto es O (n ^ 2) , lo que no importará para una lista corta que se incluirá en un combo, pero podría ser rápidamente un problema en una gran colección.
fuente
fuente
Aquí hay un enfoque O (n * n) que utiliza el espacio O (1) .
Los enfoques hash / linq anteriores son los que generalmente usaría en la vida real. Sin embargo, en las entrevistas, por lo general, quieren poner algunas restricciones, por ejemplo, un espacio constante que excluye el hash o ninguna API interna , que excluye el uso de LINQ .
fuente
strIn[j] == strIn[i]
) comparará una cadena consigo mismo a menos que se tenga en cuenta con una instrucción if.Agregue todas las cadenas a un diccionario y obtenga la propiedad Keys después. Esto producirá cada cadena única, pero no necesariamente en el mismo orden en que la entrada original las tenía.
Si necesita que el resultado final tenga el mismo orden que la entrada original, cuando considere la primera aparición de cada cadena, utilice el siguiente algoritmo:
Al final, la lista contiene la primera aparición de cada cadena única.
Asegúrate de considerar cosas como la cultura y demás al construir tu diccionario, para asegurarte de manejar correctamente los duplicados con letras acentuadas.
fuente
El siguiente fragmento de código intenta eliminar duplicados de una ArrayList, aunque esta no es una solución óptima. Me hicieron esta pregunta durante una entrevista para eliminar duplicados a través de la recursión, y sin usar una segunda lista de matrices / temp:
fuente
Solución simple:
fuente
Tal vez hashset que no almacena elementos duplicados e ignora silenciosamente las solicitudes para agregar duplicados.
fuente
NOTA: ¡NO probado!
Podría hacer lo que necesita ...
EDITAR Argh !!! golpeado por robo por menos de un minuto!
fuente
Probado a continuación y funciona. Lo bueno es que también hace una búsqueda sensible a la cultura
}
--AptSenSDET
fuente
Este código elimina al 100% los valores duplicados de una matriz [ya que usé un [i]] ..... Puede convertirlo en cualquier lenguaje OO ..... :)
fuente
Método de extensión genérico:
fuente
puede usar este código cuando trabaje con una ArrayList
fuente
fuente
A continuación se muestra una lógica simple en java que atraviesa elementos de la matriz dos veces y si ve algún mismo elemento, le asigna cero y además no toca el índice del elemento que está comparando.
fuente
fuente
fuente
Kkk No estoy seguro si esto es brujería o simplemente un código hermoso
1 strINvalues .Split (','). Distinct (). ToArray ()
2 cuerdas. Unir (",", XXX);
1 Dividir la matriz y usar Distinct [LINQ] para eliminar duplicados. 2 Volver a unirla sin los duplicados.
Lo siento, nunca leí el texto en StackOverFlow solo el código. tiene más sentido que el texto;)
fuente
fuente
¿La mejor manera? Difícil de decir, el enfoque HashSet parece rápido, pero (dependiendo de los datos) usar un algoritmo de clasificación (¿CountSort?) Puede ser mucho más rápido.
Casi sin rama. ¿Cómo? Modo de depuración, paso a paso (F11) con una pequeña matriz: {1,3,1,1,0}
Una solución con dos bucles anidados puede llevar algún tiempo, especialmente para matrices más grandes.
fuente