Есть два возможных решения:
- Удалить дубликаты вручную: имеется в виду перебор списка с вложенным циклом.
- Назначьте для структуры хеш-код и проверку на равенство и используйте
Hashset<YourStruct>
для удаления дубликатов. Это можно сделать с помощью пользовательской реализации IEqualityComparer
( link ) или, если вы "владеете" структурой, реализовав интерфейс IEquatable
с соответствующим переопределением GetHashCode
и Equals
.
Если ваш набор небольшой, и эту операцию нужно выполнить один раз в вашем коде, я бы выбрал первое решение. Но если эта логика сравнения используется снова и снова, я бы выбрал решение два.
Реализация для решения два:
struct YourStruct
{
public int Id;
}
class Comparer : IEqualityComparer<YourStruct>
{
public bool Equals(YourStruct a, YourStruct b)
{
return a.Id == b.Id;
}
public int GetHashCode(YourStruct s)
{
return s.Id;
}
}
List<YourStruct> list = new List<YourStruct>();
HashSet<YourStruct> hs = new HashSet<YourStruct>(list, new Comparer());