0Pricing
Go Academy · レッスン

スライスのソート

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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. スライスのソート
  2. カスタムソート順
  3. ソート済みデータの検索
  4. 安定ソート
← Go Academyに戻る