Encuentra duplicados en una lista en C#

Saad Aslam 12 octubre 2023
  1. Utilice Enumerable.GroupBy() para buscar duplicados en una lista en C#
  2. Use HashSet para encontrar duplicados en una lista en C#
Encuentra duplicados en una lista en C#

Al leer este artículo, comprenderemos mejor los pasos que se deben seguir para localizar entradas duplicadas en una lista utilizando el lenguaje de programación C#.

Los siguientes son los dos enfoques que se pueden utilizar para completar esta tarea:

  • Enumerable.GroupBy()
  • HashSet

Utilice Enumerable.GroupBy() para buscar duplicados en una lista en C#

Podemos usar la función Enumerable.GroupBy() para agrupar los elementos según el valor de cada elemento. Luego, un filtro elimina los grupos que solo existen una vez, dejando los grupos restantes con claves duplicadas.

Para comenzar, tendremos que importar las bibliotecas esenciales para las funciones a utilizar en la implementación.

using System;
using System.Collections.Generic;
using System.Linq;

Construiremos una nueva lista del tipo de cadena y le daremos el nombre dataList.. Agregaremos algunos elementos a la lista que acabamos de crear dentro de la función Principal().

List<string> dataList = new List<string>() { "Saad", "John", "Miller", "Saad", "Stacey" };

Ahora, necesitamos inicializar una variable checkDuplicates de tipo IEnumerable<string> que utiliza las funciones .GroupBy(), .Where() y .Select(). Este proceso buscará duplicados en la Lista de datos.

Si los hay, se almacenarán en la variable checkDuplicates.

IEnumerable<string> checkDuplicates =
    dataList.GroupBy(x => x).Where(g => g.Count() > 1).Select(x => x.Key);

Usaremos la condición para determinar si se han guardado o no duplicados en checkDuplicates.

Si esta condición no se cumple, en la consola se mostrará el mensaje No hay elementos duplicados en la lista en lugar de escribir los elementos. Por otro lado, si se cumple la condición, se mostrarán elementos duplicados.

if (checkDuplicates.Count() > 0) {
  Console.WriteLine("The duplicate elements in the list are: " +
                    String.Join(", ", checkDuplicates));
} else {
  Console.WriteLine("No duplicate elements in the list");
}

Código fuente completo:

using System;
using System.Collections.Generic;
using System.Linq;

public class DuplicatesBySaad {
  public static void Main() {
    List<string> dataList = new List<string>() { "Saad", "John", "Miller", "Saad", "Stacey" };

    IEnumerable<string> checkDuplicates =
        dataList.GroupBy(x => x).Where(g => g.Count() > 1).Select(x => x.Key);

    if (checkDuplicates.Count() > 0) {
      Console.WriteLine("The duplicate elements in the list are: " +
                        String.Join(", ", checkDuplicates));
    } else {
      Console.WriteLine("No duplicate elements in the list");
    }
  }
}

Producción :

The duplicate elements in the list are: Saad

Use HashSet para encontrar duplicados en una lista en C#

En la mayoría de los casos, lo utilizamos cuando queremos evitar que la colección se llene de piezas que son duplicados de otras. En comparación con el rendimiento de la lista, el HashSet tiene un rendimiento general sustancialmente superior.

Cree una lista dataList de tipo cadena para almacenar datos de cadena en ella.

List<string> dataList = new List<string>() { "Saad", "John", "Miller", "Saad", "Stacey" };

Después de eso, tenemos que crear un HashSet con el nombre hashSet que es de tipo cadena y luego inicializarlo antes de que podamos guardar los datos de la lista.

Además, debe crear una variable IEnumerable de tipo cadena y darle el nombre duplicateElements. Esta variable debe revisar la lista de datos y, si encuentra duplicados, debe agregarlos y guardarlos.

Y, por último, imprimiremos los elementos duplicados en la consola.

HashSet<string> hashSet = new HashSet<string>();
IEnumerable<string> duplicateElements = dataList.Where(e => !hashset.Add(e));

Console.WriteLine("The duplicate elements in the list are: " +
                  String.Join(", ", duplicateElements));

Código fuente completo:

using System;
using System.Collections.Generic;
using System.Linq;

public class DuplicatesBySaad {
  public static void Main() {
    List<string> dataList = new List<string>() { "Saad", "John", "Miller", "Saad", "Stacey" };

    HashSet<string> hashSet = new HashSet<string>();
    IEnumerable<string> duplicateElements = dataList.Where(e => !hashSet.Add(e));

    Console.WriteLine("The duplicate elements in the list are: " +
                      String.Join(", ", duplicateElements));
  }
}

Producción :

The duplicate elements in the list are: Saad
Autor: Saad Aslam
Saad Aslam avatar Saad Aslam avatar

I'm a Flutter application developer with 1 year of professional experience in the field. I've created applications for both, android and iOS using AWS and Firebase, as the backend. I've written articles relating to the theoretical and problem-solving aspects of C, C++, and C#. I'm currently enrolled in an undergraduate program for Information Technology.

LinkedIn

Artículo relacionado - Csharp List