導入
集計結果を見やすい順に並べ替えたい、といった場面は非常に多くあります。sort パッケージは、スライスを並べ替えるための標準ライブラリです。あわせて、実務で頻出する「時間」の考え方にも触れておきます。
説明
package main
import (
"fmt"
"sort"
)
func main() {
scores := []int{72, 95, 60, 88, 45}
sort.Ints(scores)
fmt.Println(scores)
names := []string{"鈴木", "田中", "佐藤"}
sort.Strings(names)
fmt.Println(names)
}
sort.Ints(スライス)…[]intを昇順に並べ替える(スライスそのものを書き換える。戻り値はない)。sort.Strings(スライス)…[]stringを辞書順に並べ替える。- 小数のスライスには
sort.Float64sを使います。
降順にしたいときは、並べ替えたあとにスライスを逆順に読むか、比較条件を工夫した独自の並べ替え(sort.Slice)を使いますが、まずは「型ごとに専用の関数がある」という基本形を覚えておけば十分です。
続いて、時間の扱いです。Go では期間(デュレーション)を time.Second や time.Millisecond のような単位の掛け算で表します。
package main
import (
"fmt"
"time"
)
func main() {
d := 3 * time.Second
fmt.Println(d/time.Second, "秒")
time.Sleep(100 * time.Millisecond) // 100ミリ秒だけ処理を止める
fmt.Println("待った後")
}
3 * time.Second… 「3秒」というデュレーションの値。単位となる定数を掛けて表現します。time.Sleep(...)… その場で処理を一時停止する。ネットワーク越しの再試行を少し待つ、といった場面で使います。
「何秒後」「何ミリ秒待つ」という時間の表現は、time.Second や time.Millisecond を単位として掛け算で作る――これが Go の時間の書き方の基本です。
やってみよう
scores の中身を色々変えて sort.Ints の結果を確かめましょう。並べ替えは元のスライスを直接書き換える(新しいスライスを作らない)ことにも注目してください。
演習
temps := []float64{22.5, 19.8, 25.1, 18.3} というスライスを sort.Float64s で昇順に並べ替え、fmt.Println で表示してください。
ヒント1を見る
sort.Float64s(temps) はスライス自体を並べ替えます。戻り値を受け取る必要はありません。
ヒント2を見る
並べ替えたあとに fmt.Println(temps) を呼べば、そのまま [18.3 19.8 22.5 25.1] の形で表示されます。