Этот метод жертвует использованием памяти для большой сложности O (скорость).
// flatten the first slice into a map for O(1) constant time lookup
m1 := make(map[string]struct{})
for _, v := range slice1 {
m1[v] = struct{}{}
}
var dup []string
// iterate slice 2, using the O(1) lookup.
for _, v := range slice2 {
if _, exists := m1[v]; exists {
dup = append(dup, v)
}
}
// dup contains the duplicates
Вы посещаете каждый из элементов только один раз, но требования к памяти намного больше, поскольку slice1 необходимо сохранить на карте.
Вы могли бы расширить этот код, чтобы сгладить на карте наименьший из 2 фрагментов, чтобы уменьшить требования к памяти.
стоит отметить, что вместо map[string]bool
используется map[string]struct{}
, поскольку struct{}
использует ноль байтов памяти