Проверяет понимание использования map в Go для удаления дубликатов из коллекции данных.
В Go нет встроенного типа множества, но map с пустыми значениями (например, map[string]struct{}) отлично подходит для этой роли. Ключи map уникальны, поэтому добавление дубликата просто перезапишет значение, но не создаст новую запись. Используя это свойство, можно легко отфильтровать дубликаты из среза.
package main
import "fmt"
func removeDuplicates(input []string) []string {
seen := make(map[string]struct{})
result := []string{}
for _, item := range input {
if _, exists := seen[item]; !exists {
seen[item] = struct{}{}
result = append(result, item)
}
}
return result
}
func main() {
data := []string{"apple", "banana", "apple", "orange", "banana"}
unique := removeDuplicates(data)
fmt.Println(unique) // [apple banana orange]
}Операции вставки и поиска в map в среднем выполняются за O(1) благодаря хешированию. Таким образом, общая сложность алгоритма составляет O(n), где n — количество элементов в исходном срезе. Это значительно быстрее, чем подход с двойным циклом (O(n^2)), особенно для больших коллекций.
Использование map для удаления дубликатов — это простой, эффективный и идиоматичный способ в Go. Он подходит для большинства случаев, когда элементы сравнимы и порядок важен. Этот подход широко применяется при обработке данных, например, при очистке списков идентификаторов или строк перед дальнейшей обработкой.