Go 语言彩虹分页算法优化建议
Go 语言彩虹分页算法优化建议
func RainbowPage(page, total, display int) []int {
isEven := display%2 == 0
left := display / 2
right := display / 2
length := display
if isEven {
right++
}
if total < display {
length = total
}
//nolint:gosimple
result := make([]int, length, length)
if total >= display {
switch {
case page <= left:
for i := 0; i < length; i++ {
result[i] = i + 1
}
case page > total-right:
for i := 0; i < length; i++ {
result[i] = i + total - display + 1
}
default:
for i := 0; i < length; i++ {
if isEven {
result[i] = i + page - length + 1
} else {
result[i] = i + page - length
}
}
}
} else {
for i := 0; i < length; i++ {
result[i] = i + 1
}
}
return result
}
这段彩虹分页算法代码本身逻辑上没有明显问题,但可以考虑以下优化:
- 将
isEven的计算提前到length和right的计算之前,避免重复计算; - 可以将
switch语句改为if-else语句,使代码更加简洁易读; - 可以考虑将相同的代码提取出来,避免重复代码。
优化后的代码
func RainbowPage(page, total, display int) []int {
isEven := display%2 == 0
if isEven {
display++
}
length := display
if total < display {
length = total
}
left := length / 2
right := length - left - 1
result := make([]int, length)
if page <= left {
for i := 0; i < length; i++ {
result[i] = i + 1
}
} else if page > total-right {
for i := 0; i < length; i++ {
result[i] = i + total - display + 1
}
} else {
start := page - left - 1
for i := 0; i < length; i++ {
result[i] = start + i
}
}
return result
}
通过这些优化,代码更加简洁高效,可读性也得到了提升。
原文地址: https://www.cveoy.top/t/topic/nJpw 著作权归作者所有。请勿转载和采集!