为了账号安全,请及时绑定邮箱和手机立即绑定

我的 golang stldib 排序出了什么问题?

我的 golang stldib 排序出了什么问题?

Go
慕村225694 2023-05-22 17:15:42
我正在尝试按其字段之一对(Golang)结构切片进行排序。我看了很多示例、go-playgrounds 和文档,我觉得我明白了,但我仍然无法让我的代码正常工作。package mainimport (    "fmt"    "sort")type Method struct {    MethodNumber int       `json:"methodNumber"`    MethodRank   int       `json:"rank"`    MethodRMSE   float64   `json:"error"`    Forecast     []float64 `json:"forecast"`}// extra stuff for sorting.type ByError []Methodfunc (s ByError) Len() int {    return len(s)}func (s ByError) Swap(i, j int) {    s[i], s[j] = s[j], s[i]}func (s ByError) Less(i, j int) bool {    return s[i].MethodRMSE < s[i].MethodRMSE}func main() {    xs := make([]Method, 0)    fmt.Println(len(xs))    xs = append(xs, Method{MethodNumber: 1, MethodRMSE: 10})    xs = append(xs, Method{MethodNumber: 2, MethodRMSE: 8})    xs = append(xs, Method{MethodNumber: 3, MethodRMSE: 6})    xs = append(xs, Method{MethodNumber: 4, MethodRMSE: 4})    fmt.Printf("%+v \n", xs)    sort.Sort(ByError(xs))    fmt.Printf("%+v \n", xs)    sort.Sort(sort.Reverse(ByError(xs)))    fmt.Printf("%+v \n", xs)}我的非工作代码:https://play.golang.org/p/h8SHVjTQSPM我的应该按 RMSE 排序,但它根本不会改变顺序。现在,我的 go playground 的结果应该是按 RMSE 升序排序,然后反向排序。
查看完整描述

1 回答

?
海绵宝宝撒

TA贡献1809条经验 获得超8个赞

这里打字错误

func (s ByError) Less(i, j int) bool {
    return s[i].MethodRMSE < s[i].MethodRMSE
}

应该

func (s ByError) Less(i, j int) bool {
    return s[i].MethodRMSE < s[j].MethodRMSE
}

因为它有点难看,第一个(错误的)版本将项目与自身进行比较(两个索引都是i)。第二个正确地使用了ij


查看完整回答
反对 回复 2023-05-22
  • 1 回答
  • 0 关注
  • 121 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信