reverse

Go でスライスを逆順にしたかったんだけど、そういう関数は用意されてないようだ。じゃあどうするかというと for 文を使ってひとつずつ入れ替えてくしかないみたい。こんなふうに。

package main

import (
    "fmt"
)

func main() {
    s := []int{ 1,2,3,4,5 }
    for i, j := 0, len(s) - 1; i < j; i, j = i + 1, j - 1 {
        s[i], s[j] = s[j], s[i]
    }
    fmt.Println(s)
}
^o^ > go run reverse.go
[5 4 3 2 1]

文字列を逆順にするにはいったん rune 型のスライスにしてから。

package main

import (
    "fmt"
)

func main() {
    s := "あいうえお"

    runes := []rune(s)
    for i, j := 0, len(runes) - 1; i < j; i, j = i + 1, j - 1 {
        runes[i], runes[j] = runes[j], runes[i]
    }
    fmt.Println(string(runes))
}
^o^ > go run reverse_string.go
おえういあ