我正在尝试按其字段之一对(Golang)结构切片进行排序。
我看了很多示例、go-playgrounds 和文档,我觉得我明白了,但我仍然无法让我的代码正常工作。
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
我的应该按 RMSE 排序,但它根本不会改变顺序。现在,我的 go playground 的结果应该是按 RMSE 升序排序,然后反向排序。
海绵宝宝撒
相关分类