当前位置: > > > > 按数字和字母顺序对基于结构的切片进行排序
按数字和字母顺序对基于结构的切片进行排序
来源:stackoverflow
2024-04-19 18:33:32
0浏览
收藏
本篇文章主要是结合我之前面试的各种经历和实战开发中遇到的问题解决经验整理的,希望这篇《按数字和字母顺序对基于结构的切片进行排序》对你有很大帮助!欢迎收藏,分享给更多的需要的朋友学习~
问题内容
我有一个像这样的结构切片和这个数据
type interval struct{
number float64
coordinate string
}
func getintervals() []interval {
data := []interval{
{number: 1, coordinate: "x"},
{number: 8, coordinate: "y"},
{number: 2, coordinate: "x"},
{number: 5, coordinate: "y"},
{number: 5, coordinate: "x"},
{number: 6, coordinate: "y"},
{number: 3, coordinate: "x"},
{number: 7, coordinate: "y"},
}
return data
}
我的问题是如何按 number 和 coordinate 对 []interval 进行排序?
我尝试过以下排序方法,但它并不符合我的期望
data := getintervals()
// sort method that i use
sort.slice(data, func(i, j int) bool {
return data[i].number < data[j].number
})
[{1 x} {2 x} {3 x} {5 y} {5 x} {6 y} {7 y} {8 y}] // result
[{1 x} {2 x} {3 x} {5 x} {5 y} {6 y} {7 y} {8 y}] // expectation
差异: {5 y} {5 x} 应该是 {5 x} {5 y}
我的预期结果与python的函数sort类似 我感谢任何帮助
演示
解决方案
在属性 number 相等的情况下,您的比较器函数不会比较属性 coordinate。因此,如果排序算法不稳定,{5, x} 和 {5, y} 的位置可能是不确定的。
这是比较器函数的更新版本:
sort.Slice(data, func(i, j int) bool {
if data[i].number != data[j].number {
return data[i].number < data[j].number
}
return data[i].coordinate < data[j].coordinate
})
参见
好了,本文到此结束,带大家了解了《按数字和字母顺序对基于结构的切片进行排序》,希望本文对你有所帮助!关注米云公众号,给大家分享更多Golang知识!
