Как найти Список имеет повторяющиеся значения в List <string>
Как определить, имеет ли значение List<string>
повторяющиеся значения?
Я пробовал с кодом ниже. Есть ли лучший способ достичь?
var lstNames = new List<string> { "A", "B", "A" };
if (lstNames.Distinct().Count() != lstNames.Count())
{
Console.WriteLine("List contains duplicate values.");
}
Ответы
Ответ 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;
}
}