ホームページ > バックエンド開発 > Golang > 「sort.Slice」を使用してカスタムフィールドでGo構造体をソートする方法?

「sort.Slice」を使用してカスタムフィールドでGo構造体をソートする方法?

DDD
リリース: 2024-12-19 06:25:10
オリジナル
448 人が閲覧しました

How to Sort Go Structs by Custom Fields Using `sort.Slice`?

Go でのカスタム フィールド名による構造体の配列の並べ替え

Go では、特定のフィールドによる構造体の配列の並べ替えは複雑になる場合があります特にカスタムキーが必要な場合。ただし、Go 1.8 での sort.Slice の導入により、このプロセスは大幅に簡単になりました。

それぞれに名前、遠日点、近日点、軸、半径などのプロパティが含まれる Planet 構造体の配列を考えてみましょう。これらの惑星を軸の値で並べ替えるには、sort.Slice 関数を利用できます。

package main

import (
    "log"
    "sort"
)

type Planet struct {
    Name       string
    Aphelion   float64
    Perihelion float64
    Axis       int64
    Radius     float64
}

func main() {
    mars := &Planet{
        Name:       "Mars",
        Aphelion:   249.2,
        Perihelion: 206.7,
        Axis:       227939100,
        Radius:     3389.5,
    }

    earth := &Planet{
        Name:       "Earth",
        Aphelion:   151.930,
        Perihelion: 147.095,
        Axis:       149598261,
        Radius:     6371.0,
    }

    venus := &Planet{
        Name:       "Venus",
        Aphelion:   108.939,
        Perihelion: 107.477,
        Axis:       108208000,
        Radius:     6051.8,
    }

    planets := [...]Planet{*mars, *venus, *earth}

    log.Println("Original order:", planets)

    sort.Slice(planets[:], func(i, j int) bool {
        return planets[i].Axis < planets[j].Axis
    })

    log.Println("Order after sorting by axis:", planets)
}
ログイン後にコピー

この例では、sort.Slice 関数は引数として惑星配列のスライスと比較関数を受け取ります。 。比較関数によって並べ替え順序が決まります。この場合、比較関数は、i 番目の要素の軸の値が j 番目の要素の軸の値より小さいかどうかをチェックします。

ソート操作により、惑星配列が適切に変更されるため、ソート操作は必要ありません。

sort.Slice が元の配列を変更することに注意することが重要です。新しい並べ替えられたスライスが必要な場合は、並べ替え前に元のスライスのコピーを明示的に作成できます。

以上が「sort.Slice」を使用してカスタムフィールドでGo構造体をソートする方法?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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