複数のパラメータを持つ構造体を並べ替える方法
プログラミングでは、多くの場合、複数の基準に基づいてデータを並べ替える必要があります。 Go では、これはカスタム並べ替え関数を使用して効果的に実現できます。
問題:
構造体のスライスを LastName、FirstName で並べ替えるにはどうすればよいですか?
slices.SortFunc を使用したソリューション (Go 1.22 ):
slices.SortFunc(members, func(a, b Member) int { return cmp.Or( cmp.Compare(a.LastName, b.LastName), cmp.Compare(a.FirstName, b.FirstName), ) })
このソリューションは、slices.SortFunc 関数を使用して、LastName フィールドと FirstName フィールドでその順序で構造体を比較します。
sort.Slice を使用したソリューション またはsort.Sort:
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 })
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))
両方ソリューションでは、最初に LastName フィールドが比較されます。それらが等しい場合は、FirstName フィールドを比較します。結果は、両方のフィールドでソートされたメンバーのスライスです。
以上がGoで複数のフィールド(姓、名)ごとに構造体を並べ替える方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。