とても基本的なことなんだろうけど、普段自分のコードで書いたことなかったので調べてみた。適宜追加するかもしれない。
注意として、「こういう書き方がGoっぽい書き方かどうか分からない」という前提で読んで欲しい。
[]string型のスライスを一つの文字列にする
単純に文字列同士を繋げるのは+演算子で出来るので、今回は文字列を格納したスライスを一つの文字列にする方法に関してやってみた。
join.go
package main
import (
"fmt"
"strings"
)
func main() {
s := []string{"ようこそ", "世界"}
fmt.Println(strings.Join(s, ""))
}
こうすれば、ようこそ世界と出力されるはず。
[]string型のスライスの要素をソートする
sortパッケージを用いる。
sort_asc_1.go
package main
import (
"fmt"
"sort"
)
func main() {
s := []string{"運", "いう", "ウン", "アナタ", "あなた", "うん", "言う", "イウ", "貴方"}
sort.Strings(s)
fmt.Println(s)
}
こう書くと[あなた いう うん アナタ イウ ウン 言う 貴方 運]と昇順に出力される。
こういう風にも書ける。
sort_asc_2.go
package main
import (
"fmt"
"sort"
)
func main() {
s := []string{"運", "いう", "ウン", "アナタ", "あなた", "うん", "言う", "イウ", "貴方"}
sort.StringSlice(s).Sort()
fmt.Println(s)
}
降順(文字列でもこう言うのだろうか?)の場合は下のようにするといいみたい。理由は知らない。もっと効率よくて分かりやすい書き方があるかもしれない。
sort_desc.go
package main
import (
"fmt"
"sort"
)
func main() {
s := []string{"運", "いう", "ウン", "アナタ", "あなた", "うん", "言う", "イウ", "貴方"}
sort.Sort(sort.Reverse(sort.StringSlice(s)))
fmt.Println(s)
}
こうすると[運 貴方 言う ウン イウ アナタ うん いう あなた]と出力される。ちゃんと降順になっているのがわかる。
疑問
スライスの要素を逆順にする関数とかメソッド(Pythonでいうreverseメソッドにあたるもの)、ないんですか? 軽く調べても見つからないんですが?