[v1.6.2] 新增 ArrayPaging 数组分页

This commit is contained in:
兔子
2025-02-17 12:53:45 +08:00
parent 028badce83
commit 0f35d40fab
2 changed files with 40 additions and 5 deletions

View File

@@ -1,15 +1,16 @@
package utils package utils
func init() { func init() {
In.Array = InArray[any] In.Array = InArray[any]
Array.Diff = ArrayDiff[any] Array.Diff = ArrayDiff[any]
Array.Intersect = ArrayIntersect[any] Array.Intersect = ArrayIntersect[any]
Array.Filter = ArrayFilter Array.Filter = ArrayFilter
Array.Remove = ArrayRemove Array.Remove = ArrayRemove
Array.Unique = ArrayUnique[any] Array.Unique = ArrayUnique[any]
Array.Empty = ArrayEmpty[any] Array.Empty = ArrayEmpty[any]
Array.Reverse = ArrayReverse[any] Array.Reverse = ArrayReverse[any]
Array.MapWithField = ArrayMapWithField Array.MapWithField = ArrayMapWithField
Array.Paging = ArrayPaging[any]
Map.WithField = MapWithField[map[string]any] Map.WithField = MapWithField[map[string]any]
Map.WithoutField = MapWithoutField[map[string]any] Map.WithoutField = MapWithoutField[map[string]any]
Map.ToURL = MapToURL Map.ToURL = MapToURL
@@ -31,6 +32,7 @@ var Array struct {
Empty func(array []any) (slice []any) Empty func(array []any) (slice []any)
Reverse func(array []any) (slice []any) Reverse func(array []any) (slice []any)
MapWithField func(array []map[string]any, field any) (slice []any) MapWithField func(array []map[string]any, field any) (slice []any)
Paging func(rows []any, page, limit int) (code int, count int, data []any)
} }
var Map struct { var Map struct {

View File

@@ -97,4 +97,37 @@ func ArrayIntersect[T any](array1, array2 []T) (slice []T) {
} }
} }
return slice return slice
}
// ArrayPaging - 分页处理
func ArrayPaging[T any](rows []T, page, limit int) (code int, count int, data []T) {
// 获取数据的总长度
count = len(rows)
// 计算总页数
if count == 0 || limit <= 0 {
code = 0
} else {
code = (count + limit - 1) / limit
}
// 检查页码是否有效
if page < 1 {
page = 1
}
if page > code {
// 如果页码超过总页数,返回空数据
return code, count, []T{}
}
// 计算当前页数据的起始和结束索引
start := (page - 1) * limit
end := start + limit
if end > count { end = count }
// 截取当前页的数据
data = rows[start:end]
return code, count, data
} }