在Go中交换变量值的最佳方法?

在Go中交换变量值的最佳方法?,go,slice,swap,Go,Slice,Swap,可以像python中那样交换元素吗 a,b = b,a 或者我们必须使用: temp = a a = b b = temp 是的,这是可能的。假设a和b具有相同的类型,所提供的示例将很好地工作。例如: a, b := "second", "first" fmt.Println(a, b) // Prints "second first" b, a = a, b fmt.Println(a, b) // Prints "first second" 这既合法又惯用,因此不需要使用中间缓冲区。

可以像python中那样交换元素吗

a,b = b,a
或者我们必须使用:

temp = a
a = b
b = temp

是的,这是可能的。假设
a
b
具有相同的类型,所提供的示例将很好地工作。例如:

a, b := "second", "first"
fmt.Println(a, b) // Prints "second first"
b, a = a, b
fmt.Println(a, b) // Prints "first second"


这既合法又惯用,因此不需要使用中间缓冲区。

是的,可以使用元组分配交换元素:

i := []int{1, 2, 3, 4}
fmt.Println(i)

i[0], i[1] = i[1], i[0]
fmt.Println(i)

a, b := 1, 2
fmt.Println(a, b)

a, b = b, a // note the lack of ':' since no new variables are being created
fmt.Println(a, b)
输出:

[1 2 3 4]
[2 1 3 4]
1 2
2 1
例如:


此处有更多详细信息:

有一个名为的函数,它获取一个切片并返回一个交换函数。此swap函数接受2个索引,并交换切片中的索引值

package main

import (
    "fmt"
    "reflect"
)

func main() {
    s := []int{1, 2, 3}

    fmt.Printf("Before swap: %v\n", s)

    swapF := reflect.Swapper(s)

    swapF(0, 1)

    fmt.Printf("After swap: %v\n", s)
}

输出

Before swap: [1 2 3]
After swap: [2 1 3]
Before swap a = 0, b = 1
After swap a = 1, b = 0

是的,您可以像python那样交换值

a, b := 0, 1
fmt.Printf("Before swap a = %v, b = %v\n", a, b)

b, a = a, b
fmt.Printf("After swap a = %v, b = %v\n", a, b)
输出

Before swap: [1 2 3]
After swap: [2 1 3]
Before swap a = 0, b = 1
After swap a = 1, b = 0

是的,您可以使用

a、 b=b,a

如果a=1,b=2, 然后在执行之后

a,b=b,a

得到a=2和b=1

还有,如果你写

a,b,a=b,a,b

结果是b=1和a=2