Функция slices.Compact
Функция slices.Compact удаляет последовательные дубликаты
из слайса. Она возвращает новый слайс, содержащий исходные
элементы, но без повторяющихся значений, которые идут друг за другом.
В первый параметр функция принимает слайс любого типа,
сравнивая элементы с помощью оператора ==.
Важно отметить, что функция не изменяет исходный слайс,
а создает новый. Она удаляет только те дубликаты, которые
находятся рядом. Например, в слайсе [1, 1, 2, 2, 3]
останутся [1, 2, 3], а в слайсе
[1, 2, 2, 1, 1] - [1, 2, 1].
Синтаксис
slices.Compact(slice)
Пример
Давайте удалим последовательные дубликаты из слайса
[]int{1, 1, 2, 2, 3, 3, 4}:
package main
import (
"fmt"
"slices"
)
func main() {
nums := []int{1, 1, 2, 2, 3, 3, 4}
res := slices.Compact(nums)
fmt.Println(res)
}
Результат выполнения кода:
[1 2 3 4]
Пример
Рассмотрим случай, где дубликаты не идут подряд.
Для слайса []string{"a", "b", "b", "a", "a", "c"}:
package main
import (
"fmt"
"slices"
)
func main() {
strs := []string{"a", "b", "b", "a", "a", "c"}
res := slices.Compact(strs)
fmt.Println(res)
}
Результат выполнения кода:
[a b a c]
Как видите, были удалены только соседние дубликаты
"b" и "a", но дубликат "a"
в позиции 3 и 4 остался, так как между ними нет
других элементов.
Пример
Функция работает и с пустым слайсом. Давайте проверим:
package main
import (
"fmt"
"slices"
)
func main() {
empty := []int{}
res := slices.Compact(empty)
fmt.Println(res)
}
Результат выполнения кода:
[]
Пример
Если слайс не содержит последовательных дубликатов, функция вернет его копию. Например:
package main
import (
"fmt"
"slices"
)
func main() {
nums := []int{1, 2, 3, 4, 5}
res := slices.Compact(nums)
fmt.Println(res)
}
Результат выполнения кода:
[1 2 3 4 5]
Смотрите также
-
функцию
slices.CompactFunc,
которая удаляет последовательные дубликаты с использованием своей функции сравнения -
функцию
slices.Clone,
которая создает копию слайса -
функцию
slices.Equal,
которая сравнивает два слайса на равенство -
функцию
slices.Delete,
которая удаляет элементы из слайса по индексам