Goにおける配列のソート:実践的なガイド
Lukas Schneider
DevOps Engineer · Leapcell

Key Takeaways
sort
パッケージは、固定サイズの配列ではなく、スライスのソートを行うための組み込み関数を提供します。- 配列を
sort.Ints
、sort.Strings
、またはsort.Float64s
でソートする前に、スライスに変換する必要があります。 - カスタムソートは、複雑なデータ型に対して
sort.Interface
を使用することで実現できます。
Goでは、配列のソートは基本的な操作であり、標準ライブラリのsort
パッケージを使用して実現できます。このパッケージはスライスをソートするためのユーティリティを提供します。スライスは、配列と比較して柔軟性があるため、Goでより一般的に使用されます。ただし、配列とスライスはGoで密接に関連しているため、配列をソートするには、ソート関数を適用する前にスライスに変換する必要があります。
Goにおける配列とスライスの理解
Goの配列は、同じ型の要素の固定サイズのシーケンスです。例:
var arr [5]int = [5]int{3, 1, 4, 5, 2}
スライスは、配列の要素への動的なサイズ変更可能な柔軟なビューです。スライスはより汎用性があり、Goプログラミングでより頻繁に使用されます。スライスは次のように宣言および初期化できます。
var s []int = []int{3, 1, 4, 5, 2}
スライスのソート
整数のスライスをソートするには、sort
パッケージのsort.Ints
関数を使用できます。
package main import ( "fmt" "sort" ) func main() { s := []int{3, 1, 4, 5, 2} sort.Ints(s) fmt.Println(s) // Output: [1 2 3 4 5] }
float64
やstring
などの他の型のスライスをソートするために、Goはそれぞれsort.Float64s
とsort.Strings
を提供します。
配列のソート
sort
パッケージの関数はスライスで動作するため、配列をソートするには、最初にスライスに変換する必要があります。その方法は次のとおりです。
package main import ( "fmt" "sort" ) func main() { arr := [5]int{3, 1, 4, 5, 2} sort.Ints(arr[:]) fmt.Println(arr) // Output: [1 2 3 4 5] }
この例では、arr[:]
は配列arr
のすべての要素を含むスライスを作成します。次に、sort.Ints
関数はこのスライスをインプレースでソートし、元の配列も変更します。
カスタムソート
カスタムコンパレータに基づいてソートしたり、構造体をそのフィールドの1つでソートしたりするなど、より複雑なソートシナリオの場合、sort.Interface
インターフェースを実装できます。これには、メソッドLen()
、Less(i, j int) bool
、およびSwap(i, j int)
が必要です。
構造体のスライスを特定のフィールドでソートする例を次に示します。
package main import ( "fmt" "sort" ) type Person struct { Name string Age int } type ByAge []Person func (a ByAge) Len() int { return len(a) } func (a ByAge) Less(i, j int) bool { return a[i].Age < a[j].Age } func (a ByAge) Swap(i, j int) { a[i], a[j] = a[j], a[i] } func main() { people := []Person{ {"Alice", 30}, {"Bob", 25}, {"Charlie", 35}, } sort.Sort(ByAge(people)) fmt.Println(people) }
これは以下を出力します。
[{Bob 25} {Alice 30} {Charlie 35}]
この例では、Person
構造体と、年齢で人をソートするためにsort.Interface
を実装するByAge
型を定義します。次に、sort.Sort
関数は、ByAge
に定義されたLess
メソッドに従ってスライスをソートします。
結論
Goでのソートは、sort
パッケージを使用すると簡単です。配列は固定サイズで、あまり一般的に使用されていませんが、スライスはより柔軟性があり、Goのコレクションの標準です。配列をスライスに変換することで、Goの強力なソート関数を利用してデータを効率的に整理できます。
FAQs
いいえ、Goのsort
パッケージはスライスでのみ機能するため、ソートする前に配列をスライスに変換する必要があります。
float64
値のスライスを昇順にソートするには、sort.Float64s(slice)
を使用します。
構造体型のsort.Interface
メソッド(Len()
、Less()
、Swap()
)を実装し、sort.Sort()
を使用します。
Leapcellは、Goプロジェクトをホストするための最適な選択肢です。
Leapcellは、Webホスティング、非同期タスク、およびRedis向けの次世代サーバーレスプラットフォームです。
多言語サポート
- Node.js、Python、Go、またはRustで開発します。
無制限のプロジェクトを無料でデプロイ
- 使用量に対してのみ料金が発生します - リクエストも料金もかかりません。
比類のない費用対効果
- アイドル料金なしの従量課金制。
- 例:25ドルで平均応答時間60msで694万リクエストをサポートします。
合理化された開発者エクスペリエンス
- 簡単なセットアップのための直感的なUI。
- 完全に自動化されたCI / CDパイプラインとGitOps統合。
- 実用的な洞察のためのリアルタイムのメトリックとロギング。
簡単なスケーラビリティと高性能
- 高い同時実行性を容易に処理するための自動スケーリング。
- 運用オーバーヘッドゼロ - 構築に集中するだけです。
ドキュメントで詳細をご覧ください。
Xでフォローしてください:@LeapcellHQ