gpt4 book ai didi

sorting - 如何根据数值对 slice 进行排序,如果数值等于则按字母顺序排序

转载 作者:IT王子 更新时间:2023-10-29 02:11:17 27 4
gpt4 key购买 nike

我有如下 slice

{string, int }

[{zaa 1} {aab 1} {xac 1}]

在这种情况下 int 边相等所以我不需要使用字母顺序排序

如果我的 slice 像下面这样

[{zaa 1} {aab 4} {xac 2}]

我需要使用数值进行排序,我该怎么做?

现在我正在使用 golang 给出的排序

type ByStringValue []string
type ByNumericValue []WeightBaseResourceInfo


func (a ByStringValue) Len() int { return len(a) }
func (a ByStringValue) Swap(i, j int) { a[i], a[j] = a[j], a[i] }
func (a ByStringValue) Less(i, j int) bool { return a[i] < a[j] }



func (a ByNumericValue) Len() int { return len(a) }
func (a ByNumericValue) Swap(i, j int) { a[i], a[j] = a[j], a[i] }
func (a ByNumericValue) Less(i, j int) bool {
w1 := a[i].Weight
w2 := a[j].Weight
return w1 > w2
}

最佳答案

要对 slice 进行排序,只需使用 sort.Slice() ,在 Go 1.8 中添加。

要使用 sort.Slice(),您只需提供一个比较器函数,该函数必须判断一个元素是否小于另一个。

less() 函数内部的逻辑应该首先测试数字,如果它们不同,数字应该决定结果。如果它们相等,则比较文本值以判断一个是否小于另一个。

例如:

type Entry struct {
Text string
Number int
}

func main() {
es := []Entry{
{"zaa", 1}, {"aab", 1}, {"xac", 1},
{"zaa", 1}, {"aab", 4}, {"xac", 2},
}

sort.Slice(es, func(i, j int) bool {
if a, b := es[i].Number, es[j].Number; a != b {
return a < b
}
return es[i].Text < es[j].Text
})

fmt.Println(es)
}

输出(在 Go Playground 上尝试):

[{aab 1} {xac 1} {zaa 1} {zaa 1} {xac 2} {aab 4}]

关于sorting - 如何根据数值对 slice 进行排序,如果数值等于则按字母顺序排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46361620/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com