Подтвердить что ты не робот

Как найти Список имеет повторяющиеся значения в List <string>

Как определить, имеет ли значение List<string> повторяющиеся значения?

Я пробовал с кодом ниже. Есть ли лучший способ достичь?

var lstNames = new List<string> { "A", "B", "A" };

if (lstNames.Distinct().Count() != lstNames.Count())
{
    Console.WriteLine("List contains duplicate values.");
}
4b9b3361

Ответ 1

Попробуйте использовать GroupBy и Any like;

lstNames.GroupBy(n => n).Any(c => c.Count() > 1);

GroupBy метод;

Группирует элементы последовательности в соответствии с указанным ключом селекторной функции и проектирует элементы для каждой группы с помощью заданной функции.

Any, он возвращает boolean;

Определяет, существует ли какой-либо элемент последовательности или удовлетворяет состояние.

Ответ 2

Если вы ищете наиболее эффективный способ сделать это,

var lstNames = new List<string> { "A", "B", "A" };
var hashset = new HashSet<string>();
foreach(var name in lstNames)
{
    if (!hashset.Add(name))
    {
        Console.WriteLine("List contains duplicate values.");
        break;
    }
}

останавливается, как только находит первый дубликат. Вы можете обернуть это методом (или методом расширения), если вы будете использовать его в нескольких местах.

Ответ 3

Обобщенная и компактная версия расширения ответа на основе хэш-метода:

public static bool AreAnyDuplicates<T>(this IEnumerable<T> list)
{
    var hashset = new HashSet<T>();
    return list.Any(e => !hashset.Add(e));
}

Ответ 4

var duplicateExists = lstNames.GroupBy(n => n).Any(g => g.Count() > 1);

Ответ 5

Как насчет попытки конвертировать в словарь.

public bool HasDuplicates(List<String> lstNames)
{
                try
                {
                    var test = lstNames.ToDictionary(x => x, y => y);
                    return false;
                }
                catch (Exception ex)
                {
                    return true;
                }
}