Удалить дубликаты из массива в C#
В этом посте будет обсуждаться, как удалить дубликаты из массива в C#, не нарушая исходный порядок элементов.
1. Использование HashSet
Мы знаем это HashSet отбрасывает дубликаты. Идея состоит в том, чтобы преобразовать данный массив (с дубликатами) в HashSet а затем преобразовать HashSet вернуться к массиву. Это приведет к массиву, но без дубликатов. Обратите внимание, что порядок элементов будет нарушен, когда HashSet используется.
В следующем примере кода показано, как использовать HashSet для удаления дубликатов из массива.
Как убрать повторы в массиве c
Всем привет. Мне 16, 4 месяца изучаю С++ и наткнулся на такую казалось бы тривиальную задачку. Решил я ее за сутки, кое-как) Задача: Дан целочисленный массив. Необходимо просто удалить все повторяющиеся элементы. НО С УСЛОВИЕМ! НЕЛЬЗЯ использовать решения из коробки языка! Все это время я занимался процедурным программированием ну и 2 недельки ООП изучаю. В общем прошу оценить и сказать на сколько все плохо) Если не трудно, предложите свои варианты решений.
Заранее всем спасибо и добра вам!


Вот рез. работы: 

Как удалить дубликаты из массива C #?
Я работал с массивом string[] в С#, который возвращается из вызова функции. Я мог бы добавить в коллекцию Generic , но мне было интересно, есть ли лучший способ сделать это, возможно, используя временный массив.
Каков наилучший способ удаления дубликатов из массива С#?
22 ответа
Для этого вы можете использовать запрос LINQ:
К сожалению, для этого решения также требуется .NET framework 3.5 или более поздняя версия, поскольку HashSet не был добавлен до этой версии. Вы также можете использовать array.Distinct(), что является функцией LINQ.
Если вам нужно его сортировать, вы можете реализовать сортировку, которая также удаляет дубликаты.
Убивает двух зайцев одним выстрелом.
Следующий проверочный и рабочий код удалит дубликаты из массива. Вы должны включить пространство имен System.Collections.
Вы можете перевести это в функцию, если хотите.
Это может зависеть от того, сколько вы хотите разработать решение — если массив никогда не будет таким большим, и вам не нужно сортировать список, вы можете попробовать что-то похожее на следующее:
— Этот вопрос о интервью задается каждый раз. Теперь я сделал свое кодирование.
Это O (n ^ 2), что не имеет значения для короткого списка, который будет заполнен в комбо, но может быть быстро проблемой в большой коллекции.
Ниже приведен подход O (n * n), который использует пространство O (1).
Подходы hash/linq, которые вы обычно используете в реальной жизни. Однако в интервью они обычно хотят установить некоторые ограничения, например. постоянное пространство, которое исключает хэш или не содержит внутреннего api, который исключает использование LINQ.
Может быть, hashset, который не хранит повторяющиеся элементы и молча игнорирует запросы для добавления дубликаты.
Следующий фрагмент кода пытается удалить дубликаты из ArrayList, хотя это не оптимальное решение. Мне задали этот вопрос во время интервью, чтобы удалить дубликаты через рекурсию и без использования второго/временного arraylist:
Добавьте все строки в словарь и затем получите свойство Keys. Это приведет к каждой уникальной строке, но не обязательно в том же порядке, в каком они были у вашего исходного ввода.
Если требуется, чтобы конечный результат имел тот же порядок, что и исходный вход, когда вы рассматриваете первое появление каждой строки, вместо этого используйте следующий алгоритм:
- У вас есть список (окончательный вывод) и словарь (для проверки дубликатов)
- Для каждой строки на входе проверьте, существует ли она в словаре уже
- Если нет, добавьте его как в словарь, так и в список
В конце список содержит первое заполнение каждой уникальной строки.
Удостоверьтесь, что вы рассматриваете такие вещи, как культура, и при построении своего словаря, чтобы убедиться, что вы правильно обрабатываете дубликаты с акцентированными буквами.
How do I remove duplicates from a C# array?
I have been working with a string[] array in C# that gets returned from a function call. I could possibly cast to a Generic collection, but I was wondering if there was a better way to do it, possibly by using a temp array.
What is the best way to remove duplicates from a C# array?
![]()
28 Answers 28
You could possibly use a LINQ query to do this:
Unfortunately this solution also requires .NET framework 3.5 or later as HashSet was not added until that version. You could also use array.Distinct(), which is a feature of LINQ.
The following tested and working code will remove duplicates from an array. You must include the System.Collections namespace.
You could wrap this up into a function if you wanted to.
If you needed to sort it, then you could implement a sort that also removes duplicates.
Kills two birds with one stone, then.
This might depend on how much you want to engineer the solution — if the array is never going to be that big and you don’t care about sorting the list you might want to try something similar to the following:
This is O(n^2), which won’t matter for a short list which is going to be stuffed into a combo, but could be rapidly be a problem on a big collection.
![]()
— This is Interview Question asked every time. Now i done its coding.
Here is a O(n*n) approach that uses O(1) space.
The hash/linq approaches above are what you would generally use in real life. However in interviews they usually want to put some constraints e.g. constant space which rules out hash or no internal api — which rules out using LINQ.
![]()
Add all the strings to a dictionary and get the Keys property afterwards. This will produce each unique string, but not necessarily in the same order your original input had them in.
If you require the end result to have the same order as the original input, when you consider the first occurance of each string, use the following algorithm instead:
- Have a list (final output) and a dictionary (to check for duplicates)
- For each string in the input, check if it exists in the dictionary already
- If not, add it both to the dictionary and to the list
At the end, the list contains the first occurance of each unique string.
Make sure you consider things like culture and such when constructing your dictionary, to make sure you handle duplicates with accented letters correctly.