カスタムフィールドコンパレーターを使用した Go でのエレガントな配列ソート
特定のフィールドによる構造体の配列のソートは、Go プログラミングの一般的なタスクになる可能性があります。これを達成するための効率的でカスタマイズ可能な方法を見てみましょう。
問題:
次のような構造体の配列があるとします。
type Planet struct { Name string `json:"name"` Aphelion float64 `json:"aphelion"` // in million km Perihelion float64 `json:"perihelion"` // in million km Axis int64 `json:"Axis"` // in km Radius float64 `json:"radius"` }
この配列を Axis フィールドで並べ替えるにはどうすればよいでしょうか?
解決策:
Go 1.8 以降、sort.Slice 関数は、カスタム比較関数を使用してスライスを並べ替える便利な方法を提供します。惑星の配列を軸ごとに並べ替えるには、次のコードを使用できます:
import "sort" // Define a comparison function to compare planets by their Axis value. var sortByAxis = func(i, j int) bool { return planets[i].Axis < planets[j].Axis } // Create a slice over the array and sort it using the custom comparison function. sort.Slice(planets[:], sortByAxis)
配列とスライスの使用:
通常、スライスを使用することをお勧めします。スライスはより柔軟で効率的であるため、Go では配列よりも優れています。ただし、この場合、planets 変数は配列として宣言されます。 sort.Slice で機能させるには、planets[:] を使用してスライスをオーバーレイする必要があります。
配列構造の並べ替えと維持:
これは重要です並べ替え操作により配列が適切に変更されることに注意してください。元の配列構造を維持したい場合は、並べ替え前にスライスのコピーを作成できます。
planetSlice := make([]Planet, len(planets)) copy(planetSlice, planets) sort.Slice(planetSlice, sortByAxis)
これにより、元の配列に影響を与えることなく、並べ替えられたスライスを使用できるようになります。
以上がGo Struct 配列をカスタムフィールドで効率的にソートするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。