Какой алгоритм наиболее хорошо подходит для удаления дубликатов строк из массива?
Знаю два способа для удаления дубликатов (либо через map, либо вложенным циклом где все будет перебираться), есть ли еще какие нибудь способы для этого?
Все зависит от того, какие строки (какой длины), сколько их, сколько у вас ресурсов на реализацию, как строки хранятся изначально, в какой они кодировке.
12rbah, Универсального алгоритма на все случаи жизни нет.
Задача в вашей постановке оторвана от реальности. Вполне возможно, что это удаление дубликатов по итогу занимает 1% от времени работы программы, и лучший выигрыш можно получить, оптимизировав хранение этих данных.
На PGP есть функция array_flip, она меняет местами ключи с их значениями в массиве. Если применить её 2 раза, массив автоматически уникализуется.
Возможно, в GO есть что-либо подобное.
в PHP массив является структурой хэш-мап (просто из коробки такой комбайн создатели замутили), это довольно замудренная структура, хотя на Go есть реализации... в любом случае над ней еще нужно навернуть flip
А если суммарно, то для данной задачи подойдет любая реализация по циклу (reduce/map как пример)
и не колдовать с хэш-мапой и колдовством над ней, чтобы не явно получить нужно поведение
Еще есть вот такой пакет с фильтром, реализованным на битовых полях, что очень хорошо экономит память при больших множествах: https://github.com/ipfs/bbloom
Все же стоит сказать про фильтр Блума то, что его нельзя использовать в чистом виде, если нужно сохранить все строки.