mvc - ¿Cómo convertir la Lista<T> a HashSet<T> en C#?
hashset como funciona c# (3)
Asegúrate de que la clase de tu objeto invalida a Equals
y GetHashCode
y luego puedes pasar la List<T>
al HashSet<T>
.
var hashSet = new HashSet<YourType>(yourList);
Puede ver: ¿Cuál es el mejor algoritmo para un System.Object.GetHashCode invalidado?
Esta pregunta ya tiene una respuesta aquí:
- Convierta una matriz a un HashSet <T> en .NET 7 respuestas
Tengo una lista que tiene duplicados de objetos. Para resolverlo, necesito convertir la Lista en un HashSet (en C #). ¿Alguien sabe cómo?
Si su tipo implementa IEquatable<T>
, Equals()
y GetHashCode()
correctamente, entonces no necesita hacer la desduplicación. Puedes usar Linq''s Distinct()
para hacerlo así:
myList = myList.Distinct().ToList();
Una forma alternativa sería
var yourlist = new List<SomeClass>();
// [...]
var uniqueObjs = yourlist.Distinct(); //Gives you a List with unique Objects of the List.
Tenga en cuenta que esto solo es posible si SomeClass
anula GetHashCode
y Equals
de alguna manera. Esto también es cierto para
var uniqueObjs = new HashSet<SomeType>(yourOriginalList);
De lo contrario, podría implementar su propio IEqualityComnparer
y pasarlo a distintas.
Tenga en cuenta que con el enfoque Distinct()
, también puede buscar distintos valores de propiedad del objeto en la lista:
var uniqueNames = yourlist.Select(obj => obj.Name).Distinct();
y algo más...