知识点掌握了,还需要不断练习才能熟练运用。下面编程网给大家带来一个golang开发实战,手把手教大家学习《我的 Golang stldib 排序出了什么问题?》,在实现功能的过程中也带大家重新温习相
知识点掌握了,还需要不断练习才能熟练运用。下面编程网给大家带来一个golang开发实战,手把手教大家学习《我的 Golang stldib 排序出了什么问题?》,在实现功能的过程中也带大家重新温习相关知识点,温故而知新,回头看看说不定又有不一样的感悟!
问题内容我正在尝试按结构体的一个字段对(golang)结构体切片进行排序。
我看过很多例子、演示和文档,我觉得我明白了,但我仍然无法让我的代码正常工作。
package main
import (
"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 []Method
func (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
工作接近重复:Https://play.golang.org/p/vactl0vwk3l(来自另一个 so 用户)
我的应该按 rmse 排序,但它根本不会改变顺序。现在,我的演示的结果应该是按 rmse 升序排序,然后反向排序。
这里有错别字
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
)。第二个正确使用了 i
和 j
。
本篇关于《我的 golang stldib 排序出了什么问题?》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于Golang的相关知识,请关注编程网公众号!
--结束END--
本文标题: 我的 golang stldib 排序出了什么问题?
本文链接: https://www.lsjlt.com/news/596372.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-04-05
2024-04-05
2024-04-05
2024-04-04
2024-04-05
2024-04-05
2024-04-05
2024-04-05
2024-04-04
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0