可能大家一说到分页或排序,可能就会想到mysql之类的数据库分页排序了。本篇文章不讲这个,主要讲解如何对数据数组进行分页,以及排序的。这种的使用场景也是有的,所以详细记录一下。

1、分片分页:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
//
// @Description: 分片分页
// param page 页码
// param pageSize 每页条数
// param servicePlatformVOList
// @return pm
// @return err
//
func SlicePage(page, pageSize, nums int) (sliceStart int, sliceEnd int) {
// 定义page和size的默认值
if page <= 0 {
page = 1
}
if pageSize <= 0 {
pageSize = 10
}
// 如果pageSize大于num(切片长度), 那么sliceEnd直接返回num的值
if pageSize > nums {
sliceStart = 0
sliceEnd = nums
}
// 总页数计算,math.Ceil 返回不小于计算值的最小整数(的浮点值)
pageCount := int(math.Ceil(float64(nums) / float64(pageSize)))
if page > pageCount {
sliceStart = 0
sliceEnd = 0
}
sliceStart = (page - 1) * pageSize
sliceEnd = sliceStart + pageSize
if sliceStart > nums {
sliceStart = nums
}
// 如果页总数比sliceEnd小,那么就把总数赋值给sliceEnd
if sliceEnd > nums {
sliceEnd = nums
}
return sliceStart, sliceEnd
}

具体使用:

1
2
sliceStart, sliceEnd := SlicePage(pageModel.Page, pageModel.Size, total)
pageModel.Data = platformPodMetricsVOs[sliceStart:sliceEnd]

2、struct数组排序

https://blog.csdn.net/raoxiaoya/article/details/115333536

实现方法后,如何支持动态排序呢?

我的想法是,在struct里面增加sortStr字段,对外不显示。实现方法中,根据该字段进行多个字段排序的实现。

例如:sortStr=cpudesc,memdesc

根据sortStr字段的值,以逗号做切分,按照顺序依次排序。


另一种想法,使用sort.SliceStable

参考:

1
2
3
4
5
6
7
8
9
10
11
sort.SliceStable(family, func(i, j int) bool {
if family[i].Age != family[j].Age {
return family[i].Age < family[j].Age
}
return strings.Compare(family[i].Name, family[j].Name) == 1
})

————————————————
原文作者:KevinYan
转自链接:https://learnku.com/articles/38269
版权声明:著作权归作者所有。商业转载请联系作者获得授权,非商业转载请保留以上作者信息和原文链接。