看似令人费解:Sudo代码(或C#,linq)用于像Google这样的分页算法



我已经为此绞尽脑汁,它比看起来更难。

请一些铁杆黑客向我展示一种实现以下内容的好方法:

给定未知大小的索引列表和已知的最大范围大小 [说 10](页面大小,即将返回多少结果)当我给予
这个函数一个索引(在索引列表的范围内)然后它 将返回我一个新的范围,返回的范围应该是大小
10,如果可能 并且返回的范围应始终尝试包含
输入索引之前的 5 个索引 返回的范围应尝试 在输入索引后包含 4 个索引

要查看此功能,请转到Google并搜索某些内容。您会得到一组包含一些链接的结果 (1 - 10)当您单击第 6 页之后的任何链接时,结果将始终在当前页面之前有五个链接,在当前页面之后有四个链接。

我只是想看看这是如何从逻辑上完成的。

如果有人有一个很酷的linq建议,那么我将不胜感激。

我已经让这段代码工作了,但它很冗长,有很多"ifs"和"elses"——我只知道有一种优雅的方法可以做到这一点。

我发现的问题在哪里:

(1) 范围小于偏移量(即只有三个结果)。

(2) 输入非常接近输入范围的开始或结束的索引。

我在网上搜索了一遍又一遍,但找不到一种简单(与语言无关)的方式来表达这种逻辑。

谢谢

您可以使用

max函数(与语言无关)来实现此目的。

start_index = max(1, index - offset)
end_index = index + offset

相关内容

最新更新