sort.Slice
の基本
sort.Slice
は、Goの標準ライブラリ sort
パッケージに含まれる関数で、スライスを特定の条件に基づいてソートするために使います。スライスと比較関数を引数に取り、スライスの要素をその条件に従って並べ替えます。
コード
sort.Slice(people, func(i int, j int) bool {
return people[i].LastName < people[j].LastName
})
1. sort.Slice(people, ...)
-
people: ソート対象のスライスです。この場合、
Person
構造体のスライスです。 -
sort.Slice
は、people
スライスの順序を変更します。
2. func(i int, j int) bool { ... }
- 比較関数: ソートの基準を定義する無名関数です。
-
引数
i
とj
: スライス内の要素のインデックスを表します。Goのソートアルゴリズムは、要素のインデックスを2つ取得し、どちらが前に来るべきかを判断します。
3. return people[i].LastName < people[j].LastName
-
比較ロジック:
-
people[i].LastName
とpeople[j].LastName
を比較しています。 -
LastName
がアルファベット順でi
の方がj
よりも前に来るべきならtrue
を返します。 - 逆に、
i
のLastName
がj
よりも後に来るべきならfalse
を返します。
-
ソートの流れ
-
初期状態:
sort.Slice
は、スライス全体をソートするために、比較関数を何度も呼び出します。 -
比較の実行:
sort.Slice
は、要素の組み合わせ(i
,j
)を選び、比較関数を呼び出します。 -
順序決定: 比較関数が
true
を返すと、people[i]
はpeople[j]
の前に来るべきと判断され、順序が調整されます。 - 繰り返し: このプロセスがスライス全体に対して行われ、最終的に全ての要素が正しい順序に並べ替えられます。