golang的map我们知道是无序的, 可是实际应用的时候, 我回经常需要返回一个有序的格式
比如list列表按时间分组排序, 这种的实现思路 应该如何呢
golang的map我们知道是无序的, 可是实际应用的时候, 我回经常需要返回一个有序的格式
比如list列表按时间分组排序, 这种的实现思路 应该如何呢
go
的sort
包提供了接口
type Interface interface {
// Len is the number of elements in the collection.
Len() int
// Less reports whether the element with
// index i should sort before the element with index j.
Less(i, j int) bool
// Swap swaps the elements with indexes i and j.
Swap(i, j int)
}
按照需要的排序规则实现其中的方法就好了。
比如你题目说的需要按照时间的先后顺序来排序,那么 Less
方法的实现,就是用对象的 Time
字段来比较大小。
如下是一个Demo,按照人的年龄来排序。
package main
import (
"fmt"
"sort"
)
// Person struct
type Person struct {
Name string
Age int
}
// Persons a set of person
type Persons []Person
// Len return count
func (p Persons) Len() int {
return len(p)
}
// Less return bigger true
func (p Persons) Less(i, j int) bool {
return p[i].Age < p[j].Age
}
// Swap swap items
func (p Persons) Swap(i, j int) {
p[i], p[j] = p[j], p[i]
}
func main() {
ps := Persons{}
ps = append(ps, Person{
"张三", 31,
})
ps = append(ps, Person{
"李四", 23,
})
ps = append(ps, Person{
"王五", 40,
})
sort.Sort(ps)
fmt.Println(ps)
}
2 回答2.4k 阅读✓ 已解决
1 回答2.4k 阅读✓ 已解决
2 回答1.7k 阅读✓ 已解决
1 回答1.2k 阅读✓ 已解决
1 回答1.4k 阅读✓ 已解决
2 回答1.2k 阅读
1 回答1.8k 阅读
两种场景:
1.自己程序内的话尽量是按照结构体子段排序,走sort接口自定义结构体排序规则就可以了。
2.如果是由于业务,和其他模块交互场景必须对map排序返回有序的json字符串,可以考虑从序列化入手,想省事的话可以直接用第三方库github.com/iancoleman/orderedmap