gpt4 book ai didi

algorithm - 自定义分页算法来计算要显示的页面

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:03:47 25 4
gpt4 key购买 nike

我正在为自定义谷歌地图控件开发自定义数据寻呼机。该控件需要确定要显示的页面范围。例如,如果用户在第 6 页,则控件必须显示第 1 页到第 10 页。如果用户在第 37 页,则控件必须显示第 30 页到第 40 页。

我可用的变量是:

X - Total results (points on the map)
Y - The current page size. i.e. the amount of points per page.
Z - The current page being displayed
Q - The number of page numbers to display (a const of 10)

我想出了:

Starting Index = Z - (Z % Q)
Ending Index = Z - (Z % Q) + Q

但是,当当前页面小于 10 时,这不起作用。它也无法确定是否达到了最大页面,即我们始终显示 10 的完整范围。但是,如果我们显示范围 30-40 最后一页实际上可能是 38。

如果有人能想出更优雅的算法,我们将不胜感激。

最佳答案

如果从章节的角度考虑,可能会更容易。

假设每组页面是一个章节,章节从 0, 1, 2,...开始编号

那么第r章的页数在范围内

Qr + 1 <= page <= Q(r+1)

现在考虑 floor(page/Q)。如果 page 不是 Q 的倍数,则为 r,否则为 r+1。

给定一个 r,您可以找出该章的页数为 Lower = Qr + 1 和 higher = min(max, Q(r+1))。

所以你可以这样做。

if (Z < 1 || Z > max_page) { error;}

if (Z % Q == 0) {
r = Z/Q - 1; // integer division, gives floor.
}
else {
r = Z/Q; // floor.
}

Begin = Q*r + 1;
End = Min (Q*(r+1), max_page);

要去掉 if,你现在可以用

代替它
if (Z < 1 || Z > max_page) { error;}

r = (Z-1)/Q;
Begin = Q*r + 1;
End = Min (Q*(r+1), max_page);

之所以可行,是因为:

Qr + 1 <= Z <= Q(r+1) 当且仅当

Qr <= Z-1 <= Qr + (Q-1)。

因此 floor((Z-1)/Q) = r。

关于algorithm - 自定义分页算法来计算要显示的页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2342447/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com