Go 语言提供了运行时反射的内置支持实现,并允许程序在反射包的帮助下操作任意类型的对象。 Golang 中的 reflect.Swapper()函数用于交换提供的切片中的元素。要访问此函数,需要在程序中导入反射包。
Syntax:
Parameters: This function takes one parameters of Slice type.
Return Value: This function returns the swapped slice.
下面的例子说明了上述方法在 Golang 中的使用:
示例 1:
func Swapper(slice interface{}) func(i, j int)
输出:
// Golang program to illustrate
// reflect.Swapper() Function
package main
import (
"fmt"
"reflect"
)
// Main function
func main() {
// Slice
src := []int{1, 2, 3, 4, 5}
fmt.Printf("Before swap: %v\n", src)
// Swapper() function is used
// to swaps the elements in
// the provided slice
swapF := reflect.Swapper(src)
swapF(2, 4)
// printing the values
fmt.Printf("After swap: %v\n", src)
}
示例 2:使用Swapper()函数反转切片
Before swap: [1 2 3 4 5]
After swap: [1 2 5 4 3]
输出:
// Golang program to illustrate
// reflect.Swapper() Function
package main
import (
"fmt"
"reflect"
)
// Main function
func main() {
// Slice
src := []int{1, 2, 3, 4, 5, 6, 7}
fmt.Printf("Original Slice: %v\n", src)
// Swapper() function is used
// to swaps the elements in
// the provided slice
swapF := reflect.Swapper(src)
for i := 0; i < len(src)/2; i++ {
swapF(i, len(src)-1-i)
}
// printing the values
fmt.Printf("Reversed Slice: %v\n", src)
}
示例 3:使用Swapper()函数对切片进行排序
Original Slice: [1 2 3 4 5 6 7]
Reversed Slice: [7 6 5 4 3 2 1]
输出:
// Golang program to illustrate
// reflect.Swapper() Function
package main
import (
"fmt"
"reflect"
)
// Main function
func main() {
// Slice
src := []int{1, 2, 6, 3, 8, 0, 7, 9, 5, 4, 42, 1, 3, 4, 3}
fmt.Printf("Original Slice: %v\n", src)
// Swapper() function is used
// to swaps the elements in
//the provided slice
swapF := reflect.Swapper(src)
for i := 0; i < len(src)-1; i++ {
for j := i + 1; j < len(src); j++ {
if src[i] > src[j] {
swapF(i, j)
}
}
}
//printing the values
fmt.Printf("Sorted Slice: %v\n", src)
}