自定义分页算法来计算页面显示
我正在寻找一个自定义数据分页器的自定义谷歌地图控制。控件需要确定要显示的页面范围。例如,如果用户在第6页上,则控件必须显示第1页到第10页。如果用户在第37页上,则控件必须显示第30页到第40页。自定义分页算法来计算页面显示
我可用的变量有:
X - 总成绩(在地图上的点)
Ÿ - 当前页面的大小。即每页的点数。
ž - 当前正在显示
Q - 页码数显示(10常量)
我想出了:
启动索引 = Z - (Z%Q)
结束索引 = ž - (Ž%Q)+ Q
然而,这不适用于当所述当前页面是小于10。它也工作不知道是否有最大页面达到,即我们总是显示10的全部范围。但是,如果我们显示范围30-40,最终页面实际上可能是38.
如果任何人都可以上来用更优雅的算法,它将是appre ciated。
如果按照章节思考,这可能会更容易。
说每个组页面是一章,章从0,1,2,开始编号为...
然后第r个章具有范围页
Q R + 1 < =页< = Q(r + 1)
现在考虑floor(page/Q)。如果页面不是Q的倍数,则为r,否则为r + 1。给定一个r,你可以找到这个章节的页面,作为下= Q r + 1和更高= 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 (Z < 1 || Z > max_page) { error;}
r = (Z-1)/Q;
Begin = Q*r + 1;
End = Min (Q*(r+1), max_page);
这工作代替它,因为:
Q R + 1 < = Z < = Q(R + 1)当且仅当
Q r < = Z-1 < = Q r +(Q-1)。
因此floor((Z-1)/ Q)= r。
Z/Q不是Z // Q? – 2010-02-26 15:47:15
@Ryan:Z/Q =整数除法,对于正整数,与floor相同。使用任何你的语言给你。另外,我已经摆脱了,看看是否适合你。 – 2010-02-26 16:04:02
非常感谢,我使用服务器端排序结果集分页。我正在寻找一种算法来查找与给定搜索条件匹配的任何记录的页码。排序。 – doright 2012-06-09 13:13:20
这里,我们去:
def lower(Z):
return (Z - 1) // Q * Q + 1
def upper(Z):
return min(int(ceil(X/Y)), ((Z - 1) // Q + 1) * Q)
//
是整数除法。
为什么这不是公认的答案? – Merc 2016-08-10 03:30:06
如果您必须显示第20页,该怎么办?会是10-20还是20-30? – 2010-02-26 15:20:08
道歉应该是11-20,21-30等 – 2010-02-26 15:23:26