Функция reflect.Swapper
Функция reflect.Swapper возвращает функцию, которая позволяет обменивать местами два элемента в слайсе. В качестве параметра она принимает слайс любого типа и возвращает функцию с сигнатурой func(i, j int), где i и j - индексы элементов, которые необходимо поменять местами. Возвращенная функция работает напрямую с переданным слайсом, изменяя его содержимое.
Синтаксис
reflect.Swapper(slice)
Пример
Давайте создадим функцию обмена для слайса строк и поменяем местами элементы с индексами 1 и 3:
package main
import (
"fmt"
"reflect"
)
func main() {
slice := []string{"a", "b", "c", "d", "e"}
fmt.Println("Before swap:", slice)
swap := reflect.Swapper(slice)
swap(1, 3)
fmt.Println("After swap:", slice)
}
Результат выполнения кода:
"Before swap: [a b c d e]"
"After swap: [a c d b e]"
Пример
Давайте используем reflect.Swapper для обмена элементов в слайсе целых чисел:
package main
import (
"fmt"
"reflect"
)
func main() {
numbers := []int{1, 2, 3, 4, 5}
fmt.Println("Before swap:", numbers)
swap := reflect.Swapper(numbers)
swap(0, 4)
fmt.Println("After swap:", numbers)
}
Результат выполнения кода:
"Before swap: [1 2 3 4 5]"
"After swap: [5 2 3 4 1]"
Пример
Рассмотрим ситуацию, когда обмен элементов выполняется несколько раз подряд:
package main
import (
"fmt"
"reflect"
)
func main() {
slice := []string{"a", "b", "c", "d", "e"}
fmt.Println("Initial:", slice)
swap := reflect.Swapper(slice)
swap(0, 2)
fmt.Println("After swap 0 and 2:", slice)
swap(2, 4)
fmt.Println("After swap 2 and 4:", slice)
swap(1, 3)
fmt.Println("After swap 1 and 3:", slice)
}
Результат выполнения кода:
"Initial: [a b c d e]"
"After swap 0 and 2: [c b a d e]"
"After swap 2 and 4: [c b e d a]"
"After swap 1 and 3: [c d e b a]"
Смотрите также
-
функцию
reflect.ValueOf,
которая возвращает отраженное значение переменной -
функцию
reflect.TypeOf,
которая возвращает отраженный тип переменной -
функцию
reflect.DeepEqual,
которая выполняет глубокое сравнение значений -
функцию
reflect.Copy,
которая копирует элементы между слайсами через отражение