スライスのソート
sort.Sliceとヘルパーを使用します
「スライスのソート」はCoddyKit上の無料Go Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはGo Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Go Academyコースには全4レッスンが含まれています。
ソートが重要な理由
ソートによって要素を定義された順序に並べられます。Go の標準ライブラリにある sort パッケージが、これを効率的に処理します。
Go では、独自のソートアルゴリズムを書くことはほとんどありません。その代わり、スライスに対して動作するヘルパーを呼び出します。
sort のインポート
このパッケージを使うには、import "sort" としてインポートします。標準ライブラリに含まれているため、外部からダウンロードする必要はありません。
package main
import (
"fmt"
"sort"
)
func main() {
fmt.Println("sort imported")
_ = sort.IntsAreSorted([]int{1, 2, 3})
}整数のソート
sort.Ints は int のスライスを昇順にインプレースでソートします。元のスライスが変更されます。
package main
import (
"fmt"
"sort"
)
func main() {
nums := []int{5, 2, 8, 1, 9}
sort.Ints(nums)
fmt.Println(nums)
}文字列のソート
sort.Strings は文字列のスライスを辞書順(アルファベット順、バイト順)にソートします。
package main
import (
"fmt"
"sort"
)
func main() {
words := []string{"banana", "apple", "cherry"}
sort.Strings(words)
fmt.Println(words)
}浮動小数点数のソート
sort.Float64s は float64 値のスライスを昇順にソートします。
package main
import (
"fmt"
"sort"
)
func main() {
values := []float64{3.2, 1.5, 2.8}
sort.Float64s(values)
fmt.Println(values)
}sort.Slice
sort.Slice は、指定したless関数を使って任意のスライスをソートします。この関数は2つのインデックス i と j を受け取り、要素 i を j より前に置くべき場合に true を返します。
package main
import (
"fmt"
"sort"
)
func main() {
nums := []int{5, 2, 8, 1}
sort.Slice(nums, func(i, j int) bool {
return nums[i] < nums[j]
})
fmt.Println(nums)
}降順
降順にソートするには、less関数内の比較を逆にします。nums[i] > nums[j] を返してください。
package main
import (
"fmt"
"sort"
)
func main() {
nums := []int{5, 2, 8, 1}
sort.Slice(nums, func(i, j int) bool {
return nums[i] > nums[j]
})
fmt.Println(nums)
}構造体のソート
sort.Slice は構造体で特に役立ちます。どのフィールドで順序を決めるかを指定できます。
package main
import (
"fmt"
"sort"
)
type Person struct {
Name string
Age int
}
func main() {
people := []Person{{"Bob", 30}, {"Alice", 25}}
sort.Slice(people, func(i, j int) bool {
return people[i].Age < people[j].Age
})
fmt.Println(people)
}ソート済みか確認する
sort.IntsAreSorted や sort.SliceIsSorted のようなヘルパーは、スライスを変更せずに、すでにソート済みであれば true を返します。
package main
import (
"fmt"
"sort"
)
func main() {
nums := []int{1, 2, 3}
fmt.Println(sort.IntsAreSorted(nums))
}インプレースでの変更
これらの関数はすべてインプレースでソートします。新しいスライスは返しません。sort.Ints(s) を呼び出すと、変数 s 自体の順序が変わります。
package main
import (
"fmt"
"sort"
)
func main() {
s := []int{3, 1, 2}
sort.Ints(s)
fmt.Println("s is now:", s)
}適切なヘルパーを選ぶ
単純なスライスには、型付きヘルパー(sort.Ints、sort.Strings、sort.Float64s)を使ってください。独自のルールが必要な場合や構造体をソートする場合は、sort.Slice を使います。
sort.Ints- 整数を昇順にソートsort.Slice- 任意のデータを指定したルールでソート
確認問題
sort.Slice の less関数は何を返しますか。
まとめ
sort パッケージを使ったソート方法を学びました。
- 型付きスライスには
sort.Ints、sort.Strings、sort.Float64sを使います - 独自のルールや構造体には、less関数とともに
sort.Sliceを使います - すべてのソートはインプレースで行われます
よくある質問
「スライスのソート」レッスンは無料ですか?
はい。「スライスのソート」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Go Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Go Academyコースには全4レッスンが含まれています。
「スライスのソート」で何を学びますか?
sort.Sliceとヘルパーを使用します ブラウザで直接実行するハンズオンコードでGo Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Go Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのGo Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。
「スライスのソート」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このGo Academyレッスンでコードを書いて実行できますか?
はい。すべてのGo Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- スライスのソート
- カスタムソート順
- ソート済みデータの検索
- 安定ソート