Я работал с string[]
массивом в C #, который возвращается из вызова функции. Я мог бы привести к Generic
коллекции, но мне было интересно, есть ли лучший способ сделать это, возможно, с использованием временного массива.
Каков наилучший способ удалить дубликаты из массива C #?
c#
arrays
duplicates
lomaxx
источник
источник
Ответы:
Вы можете использовать запрос LINQ для этого:
источник
.Distinct(StringComparer.OrdinalIgnoreCase)
чтобы получить независимый от регистра отдельный набор строк.The Distinct() method returns an unordered sequence that contains no duplicate values.
Вот подход HashSet <string> :
К сожалению, для этого решения также требуется .NET Framework 3.5 или более поздняя версия, поскольку HashSet не был добавлен до этой версии. Вы также можете использовать array.Distinct () , который является функцией LINQ.
источник
Следующий проверенный и работающий код удалит дубликаты из массива. Вы должны включить пространство имен System.Collections.
Вы можете обернуть это в функцию, если хотите.
источник
Если вам нужно было отсортировать его, вы можете реализовать сортировку, которая также удаляет дубликаты.
Тогда убивает двух зайцев.
источник
Это может зависеть от того, насколько вы хотите спроектировать решение - если массив никогда не будет таким большим, и вы не заботитесь о сортировке списка, вы можете попробовать что-то похожее на следующее:
источник
- Это вопрос интервью, который задают каждый раз. Теперь я сделал свое кодирование.
источник
Это O (n ^ 2) , который не будет иметь значения для короткого списка, который будет вставлен в комбо, но может быстро стать проблемой для большой коллекции.
источник
источник
Вот подход O (n * n), который использует пространство O (1) .
Приведенные выше подходы hash / linq - это то, что вы обычно используете в реальной жизни. Однако в интервью они обычно хотят наложить некоторые ограничения, например, постоянное пространство, которое исключает хэш или нет внутреннего API - которое исключает использование LINQ .
источник
strIn[j] == strIn[i]
) будет сравнивать строку с самим собой, если это не учитывается с помощью оператора if.Добавьте все строки в словарь и впоследствии получите свойство Keys. Это создаст каждую уникальную строку, но не обязательно в том же порядке, в котором они были в исходном вводе.
Если требуется, чтобы конечный результат имел тот же порядок, что и исходный ввод, при рассмотрении первого вхождения каждой строки используйте вместо этого следующий алгоритм:
В конце список содержит первое вхождение каждой уникальной строки.
Убедитесь, что вы учитываете такие вещи, как культура и тому подобное, при создании словаря, чтобы убедиться, что вы правильно обрабатываете дубликаты с акцентированными буквами.
источник
Следующий фрагмент кода пытается удалить дубликаты из ArrayList, хотя это не является оптимальным решением. Этот вопрос мне задавали во время интервью, чтобы удалить дубликаты путем рекурсии и без использования второго / временного архива:
источник
Простое решение:
источник
Может быть, hashset, который не хранит дублирующиеся элементы и молча игнорирует запросы на добавление дубликатов.
источник
ПРИМЕЧАНИЕ: НЕ проверено!
Можешь делать то, что тебе нужно ...
РЕДАКТИРОВАТЬ Argh !!! побил его грабителем менее чем за минуту!
источник
Протестировано ниже, и это работает. Что круто, так это то, что он делает поиск с учетом культуры тоже
}
--AptSenSDET
источник
Этот код на 100% удаляет повторяющиеся значения из массива [как я использовал [i]] ..... Вы можете конвертировать его на любом языке OO ..... :)
источник
Общий метод расширения:
источник
Вы можете использовать этот код при работе с ArrayList
источник
источник
Ниже приведена простая логика в Java, когда вы дважды просматриваете элементы массива, и если вы видите какой-либо элемент, вы присваиваете ему ноль, плюс вы не касаетесь индекса сравниваемого элемента.
источник
источник
источник
Kkk Не уверен, что это колдовство или просто красивый код
1 strINvalues .Split (','). Distinct (). ToArray ()
2 string.Join (",", XXX);
1 Разделение массива и использование Distinct [LINQ] для удаления дубликатов 2 Присоединение к нему без дубликатов.
Извините, я никогда не читал текст на StackOverFlow только код. это имеет больше смысла, чем текст;)
источник
источник
Лучший путь? Трудно сказать, подход HashSet выглядит быстро, но (в зависимости от данных) использование алгоритма сортировки (CountSort?) Может быть намного быстрее.
Почти бесплатная ветка. Как? Режим отладки, Step Into (F11) с небольшим массивом: {1,3,1,1,0}
Решение с двумя вложенными циклами может занять некоторое время, особенно для больших массивов.
источник