56 votos

Llegar únicos elementos de una lista

¿Cuál es la más rápida y más eficiente manera de llegar a todos los distintos elementos de una lista?

Tengo un List<string> que posiblemente tiene múltiples repetición de elementos en él y sólo desea que los valores únicos dentro de la lista.

88voto

Vinay Sajip Puntos 41286

El uso de un HashSet<T>. Por ejemplo:

var items = "A B A D A C".Split(' ');
var unique_items = new HashSet<string>(items);
foreach (string s in unique_items)
    Console.WriteLine(s);

impresiones

Un
B
D
C

58voto

LukeH Puntos 110965

Usted puede utilizar el Distinct método de devolución de un IEnumerable<T> de artículos distintos:

var uniqueItems = yourList.Distinct();

Y si usted necesita la secuencia de los únicos artículos devueltos como List<T>, puede añadir una llamada a ToList:

var uniqueItemsList = yourList.Distinct().ToList();

5voto

aku Puntos 54867

Puede utilizar Distintos métodos de extensión de LINQ

5voto

Murilo Beltrame Puntos 59

En .Net 2.0 estoy bastante seguro acerca de esta solución:

public IEnumerable<T> Distinct<T>(IEnumerable<T> source)
{
     List<T> uniques = new List<T>();
     foreach (T item in source)
     {
         if (!uniques.Contains(item)) uniques.Add(item);
     }
     return uniques;
}

3voto

Noldorin Puntos 67794

Aparte de la Distinct método de extensión de LINQ, usted podría usar un HashSet<T> objeto que llegará con su colección. Esto es más probable, más eficiente que el de LINQ manera, ya que utiliza códigos hash (GetHashCode) en lugar de un IEqualityComparer).

De hecho, si es apropiado para su situación, sólo quiero usar un HashSet para el almacenamiento de los elementos en el primer lugar.

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X