Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Как проверить, есть ли повторяющиеся элементы в СВЯЗНОМ СПИСКЕ C#

Георгий Кищенко Ученик (143), на голосовании 1 месяц назад
линкед лист заполнен поинтами, трудность в том, что к нему нельзя применить индексирование, как проверить, есть ли повторяющиеся элементы
Голосование за лучший ответ
Jurijus Zaksas Искусственный Интеллект (445747) 2 месяца назад
Если элементы поддерживают интерфейс IEquatable, можно просто найти пересечение множеств и проверить его на пустоту. Если списки длинные, а проверять надо часто, то лучше использовать не LinkedList, а какую-то другую структуру.

 LinkedList L1 = new LinkedList(); 
L1.AddLast(1);
L1.AddLast(2);
L1.AddLast(4);
L1.AddLast(5);

LinkedList L2 = new LinkedList();
L2.AddLast(1);
L2.AddLast(3);
L2.AddLast(4);

Console.WriteLine(L1.Intersect(L2).Aggregate(string.Empty, (x, y) => x+=y.ToString()+ " "));
Георгий КищенкоУченик (143) 2 месяца назад
список действительно длинный и проверять его надо часто, но менять целый класс ради одного метода - не вариант. нашел решение на поверхности: создал массив(в методе, отвечающем за нахождение дубликатов) поинтов, куда скопировал все элементы линкед листа. стало стыдно, что не додумался раньше
Jurijus Zaksas Искусственный Интеллект (445747) Копирование элементов немногим лучше вышеуказанного способа по быстродействию. Откуда вообще взялся LinkedList? Если хочешь быстро сравнивать наборы данных, лучше использовать HashSet.
Похожие вопросы