¿Cómo elimino duplicados de una matriz de C#?
He estado trabajando con una string[]
matriz en C# que se devuelve desde una llamada de función. Posiblemente podría enviar contenido a una Generic
colección, pero me preguntaba si había una mejor manera de hacerlo, posiblemente usando una matriz temporal.
¿Cuál es la mejor manera de eliminar duplicados de una matriz de C#?
Posiblemente podrías usar una consulta LINQ para hacer esto:
int[] s = { 1, 2, 3, 3, 4};
int[] q = s.Distinct().ToArray();
Aquí está el enfoque HashSet<string> :
public static string[] RemoveDuplicates(string[] s)
{
HashSet<string> set = new HashSet<string>(s);
string[] result = new string[set.Count];
set.CopyTo(result);
return result;
}
Lamentablemente, esta solución también requiere .NET framework 3.5 o posterior, ya que HashSet no se agregó hasta esa versión. También puedes usar array.Distinct() , que es una característica de LINQ.
El siguiente código probado y funcional eliminará los duplicados de una matriz. Debe incluir el espacio de nombres System.Collections.
string[] sArray = {"a", "b", "b", "c", "c", "d", "e", "f", "f"};
var sList = new ArrayList();
for (int i = 0; i < sArray.Length; i++) {
if (sList.Contains(sArray[i]) == false) {
sList.Add(sArray[i]);
}
}
var sNew = sList.ToArray();
for (int i = 0; i < sNew.Length; i++) {
Console.Write(sNew[i]);
}
Podrías resumir esto en una función si quisieras.
Si necesita ordenarlo, puede implementar una clasificación que también elimine los duplicados.
Entonces mata dos pájaros de un tiro.
Esto podría depender de cuánto desee diseñar la solución: si la matriz nunca va a ser tan grande y no le importa ordenar la lista, es posible que desee probar algo similar a lo siguiente:
public string[] RemoveDuplicates(string[] myList) {
System.Collections.ArrayList newList = new System.Collections.ArrayList();
foreach (string str in myList)
if (!newList.Contains(str))
newList.Add(str);
return (string[])newList.ToArray(typeof(string));
}