分页彩虹算法 - 生成分页列表显示

该算法通过传入当前页、总页数、每屏展示的页数,生成一个分页列表显示,类似 [4,5,6,7,8]

示例:

// 当前页为 5,总页数为 10,每屏展示 5 页
rainbow(5, 10, 5) // [3, 4, 5, 6, 7]

代码实现(Go语言):

package main

import (
    "fmt"
    "math"
)

/**
 * 分页彩虹算法
 * 通过传入的信息,生成一个分页列表显示
 * [4,5,6,7,8]
 * @param currentPage 当前页
 * @param pageCount 总页数
 * @param displayCount 每屏展示的页数
 * @return 分页条
 */
func rainbow(currentPage, pageCount, displayCount int) []int {
    isEven := true
    isEven = displayCount%2 == 0
    left := displayCount / 2
    right := displayCount / 2

    length := displayCount
    if isEven {
        right++
    }
    if pageCount < displayCount {
        length = pageCount
    }
    result := make([]int, length)
    if pageCount >= displayCount {
        if currentPage <= left {
            for i := 0; i < len(result); i++ {
                result[i] = i + 1
            }
        } else if currentPage > pageCount-right {
            for i := 0; i < len(result); i++ {
                result[i] = i + pageCount - displayCount + 1
            }
        } else {
            for i := 0; i < len(result); i++ {
                result[i] = i + currentPage - left + int(math.Ceil(float64(displayCount)/2.0))
            }
        }
    } else {
        for i := 0; i < len(result); i++ {
            result[i] = i + 1
        }
    }
    ceilResult := make([]int, len(result))
    for i := 0; i < len(result); i++ {
        ceilResult[i] = int(math.Ceil(float64(result[i])))
    }
    return ceilResult
}

func main() {
    fmt.Println(rainbow(5, 10, 5)) //[3, 4, 5, 6, 7]
}

算法原理:

  1. 判断奇偶数: 判断 displayCount 是否为偶数,因为偶数情况下需要额外处理右边的页码。
  2. 计算左右页码: 根据 displayCount 计算左右两侧需要显示的页码数量。
  3. 处理边界情况:
    • 当总页数小于每屏展示的页数时,直接显示所有页码。
    • 当当前页小于 left 时,显示从 1 开始的页码。
    • 当当前页大于 pageCount - right 时,显示从 pageCount - displayCount + 1 开始的页码。
    • 其他情况下,显示从 currentPage - left + (isEven ? 1 : 0) 开始的页码。
  4. 向上取整: 使用 math.Ceil 将所有页码向上取整,确保所有页码为整数。

应用场景:

分页彩虹算法可以应用于各种需要展示分页列表的场景,例如博客、论坛、电商平台等。它可以帮助用户快速定位到想要的页面,提高用户体验。

分页彩虹算法 - 生成分页列表显示

原文地址: https://www.cveoy.top/t/topic/nJpJ 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录