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
}

这段彩虹分页算法代码本身逻辑上没有明显问题,但可以考虑以下优化:

  1. isEven 的计算提前到 lengthright 的计算之前,避免重复计算;
  2. 可以将 switch 语句改为 if-else 语句,使代码更加简洁易读;
  3. 可以考虑将相同的代码提取出来,避免重复代码。

优化后的代码

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
}

通过这些优化,代码更加简洁高效,可读性也得到了提升。

Go 语言彩虹分页算法优化建议

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

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