Как узнать, есть ли дубликаты в одном списке по сравнению с другим?

2

У меня есть список, в котором у MyClass есть свойство 'Name'. Я хочу знать, есть ли дубликат MyClass с тем же именем в списке.

Кроме того, у меня есть другой список, и я хочу знать, есть ли дубликаты по сравнению с List A.

  • 0
    Какую версию .NET, какую версию VS вы используете?
  • 1
    Ни один из результатов поиска не помог? Я уверен, что об этом спрашивали много раз. stackoverflow.com/search?q=list+duplicates+c%23
Показать ещё 1 комментарий
Теги:
list
duplicates

2 ответа

6
Лучший ответ

Чтобы ответить на первый вопрос

Я хочу знать, есть ли дубликат MyClass с тем же именем в список.

вы можете сделать это:

bool hasDuplicates = 
  listA.Count != listA.Select(c => c.Name).Distinct().Count();

В ответ на второй вопрос

Кроме того, у меня есть другой Список и я хотите знать, есть ли какие-либо дубликатов по сравнению со списком А.

вы можете сделать это:

bool hasDuplicates = 
  differentList.Select(c => c.Name).Intersect(listA.Select(c => c.Name)).Any();
  • 0
    Нужен ли мне собственный компаратор для первого ансера?
  • 0
    Для какой части? Вызов Distinct будет использовать EqualityComparer <string> .Default внутри, если вы не предоставите IEqualityComparer <string>. Значение по умолчанию описано здесь: msdn.microsoft.com/en-us/library/ms224763.aspx .
2

Чтобы проверить дубликаты имен в пределах одного List<MyClass> list:

var names = new HashSet<String>();
foreach (MyClass t in list)
    if(!names.Add(t.Name))
        return "Duplicate name!"
return "No duplicates!"

или варианты в зависимости от того, что вы хотите делать, когда есть/не дублируются. В случае двух отдельных списков просто создайте набор names из одного списка и зациклируйте с этим типом проверки на другом (детали зависят от того, что должно было произойти для повторяющихся имен только в первом списке, во втором списке только или только между одним списком и другим, когда каждый из них без дубликатов, если рассматривать их отдельно - ваши спецификации слишком неточны, чтобы позволить мне угадать, чего вы хотите или ожидаете в каждой из множества возможных комбинаций!

  • 0
    +1 за упоминание HashSet .. спасибо :)
  • 0
    @Mahesh, добро пожаловать - хеш-таблицы - это очень общие инструменты (хотя я, конечно, вижу смысл очень специфического ответа @ gwiz .NET, подход на основе хеш-функций очень широко переносим ;-).
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню