Go实现基本的swap函数

问题

在C++中stl算法中提供了非常好用的swap函数,而Go中目前还没有。
虽然swap的函数很容易通过^实现,但是也要三行代码。

1
2
3
4
5
6
7
8
// 示例,对字符串进行reverse操作,注意这里对[]rune(string)进行操作
func reverse(s []rune) {
    for l, r := 0, len(s) - 1; l < r; l, r = l + 1, r - 1{
        s[l] ^= s[r]
        s[r] ^= s[l]
        s[l] ^= s[r]
    }
}

解决方案

其实可以利用Go的语法特点,在一行中完成swap函数的功能,代码如下:

1
2
3
4
5
func reverse(s []rune) {
    for l, r := 0, len(s) - 1; l < r; l, r = l + 1, r - 1{
        s[l], s[r] = s[r], s[l]
    }
}