ホームページ > バックエンド開発 > Golang > 構造体の Go 配列をカスタムフィールド名で効率的に並べ替えるにはどうすればよいですか?

構造体の Go 配列をカスタムフィールド名で効率的に並べ替えるにはどうすればよいですか?

Linda Hamilton
リリース: 2024-12-21 18:10:10
オリジナル
240 人が閲覧しました

How Can I Efficiently Sort a Go Array of Structs by a Custom Field Name?

カスタムフィールド名による配列の効率的な並べ替え

データ構造の並べ替えはプログラミングの基本的なタスクであり、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"`
}

func main() {
    planets := [...]Planet{{"Mars", 249.2, 206.7, 227939100, 3389.5},
                         {"Venus", 108.939, 107.477, 108208000, 6051.8},
                         {"Earth", 151.930, 147.095, 149598261, 6371.0}}
}
ログイン後にコピー

どのように並べ替えることができますか?地軸に沿った惑星の配列フィールド?

解決策

最近のバージョンの Go では、sort.Slice 関数により、カスタム比較関数に基づいてスライスを並べ替える効率的な方法が提供されます。

sort.Slice(planets[:], func(i, j int) bool {
  return planets[i].Axis < planets[j].Axis
})
ログイン後にコピー

こちら、i および j はスライス内の要素のインデックスであり、インデックス i の要素がインデックス j の要素の前に来る必要がある場合、比較関数は true を返します。この場合、惑星の Axis フィールドを比較しています。

配列 (スライスではなく) を使用する場合、配列をスライスに変換するにはスライス オーバーレイ演算子 [:] が必要であることに注意してください。

結論

sort.Slice を活用することで、任意のフィールドに基づいて構造体の配列をシンプルかつ効率的にソートできます。名前。これにより、Go で複雑なデータ構造をソートするための Python のようなエクスペリエンスが提供されます。

以上が構造体の Go 配列をカスタムフィールド名で効率的に並べ替えるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート