構造体の配列またはスライスを操作する場合、複数のパラメータによる並べ替えが一般的な要件となることがあります。このガイドでは、LastName と FirstName の両方によるソートの特定のニーズに焦点を当て、複数のパラメーターに基づいて構造体をソートするためのさまざまなアプローチを説明します。
Go 1.22 以降、slices.SortFunc 関数は、スライスを並べ替えるための簡潔で読みやすいソリューションを提供します。カスタム比較関数を引数として取り、並べ替え基準を定義できるようにします。 LastName、FirstName の順に並べ替えるには、cmp.Or 関数と cmp.Compare 関数を使用できます。
slices.SortFunc(members, func(a, b Member) int { return cmp.Or( cmp.Compare(a.LastName, b.LastName), cmp.Compare(a.FirstName, b.FirstName), ) })
sort.Slice 関数は、スライスを並べ替える簡単な方法。スライスと比較関数を引数として受け取ります。比較関数は、最初の引数が 2 番目の引数より小さい場合は true を返し、それ以外の場合は false を返す必要があります。 LastName、FirstName の順に並べ替えるには、次の比較関数を作成できます。
sort.Slice(members, func(i, j int) bool { if members[i].LastName != members[j].LastName { return members[i].LastName < members[j].LastName } return members[i].FirstName < members[j].FirstName })
もう 1 つの方法は、sort.Sort 関数を使用することです。 sort.Interface インターフェイスを実装する値を受け取ります。このインターフェイスには、Len()、Swap()、および Less() の 3 つのメソッドが必要です。 Less() メソッドは、前のアプローチで使用した比較関数と同じです。
type byLastFirst []Member func (members byLastFirst) Len() int { return len(members) } func (members byLastFirst) Swap(i, j int) { members[i], members[j] = members[j], members[i] } func (members byLastFirst) Less(i, j int) bool { if members[i].LastName != members[j].LastName { return members[i].LastName < members[j].LastName } return members[i].FirstName < members[j].FirstName } sort.Sort(byLastFirst(members))
どのアプローチが最適かは、特定のアプリケーションとパフォーマンス要件によって異なります。パフォーマンスが重要な要素でない限り、読みやすさとメンテナンスに基づいて最も便利なアプローチを選択することをお勧めします。
以上がGoで構造体を複数のパラメータ(姓、名)で並べ替える方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。