ホームページ > バックエンド開発 > Golang > Go Struct 配列をカスタムフィールドで効率的にソートするにはどうすればよいですか?

Go Struct 配列をカスタムフィールドで効率的にソートするにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2024-12-22 15:26:15
オリジナル
554 人が閲覧しました

How Can I Efficiently Sort a Go Struct Array by a Custom Field?

カスタムフィールドコンパレーターを使用した 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 サイトの他の関連記事を参照してください。

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