确定要获取的项目数

时间:2009-03-19 12:16:23

标签: database collections lazy-loading

我正在编写一个惰性列表来检索具有给定条件和给定分页的数据库中的项目(起始索引和所需项目数)。

在列表的实例化中,我计算映射表中的项目总数,这样我就有了列表的初始大小( initial ,因为列表允许添加和删除项目)。

它几乎可以工作,但在确定要获取的具体项目数时我遇到了一些麻烦:实际上,我让用户指定给定的提取大小(假设 10) ,在这个例子中)。

要确定要获取的确切项目数,目前我将获取大小因子添加到集合中项目的当前索引(从数据库表中检索到的最后一个):如果结果小于或等于总计数,我不做任何动作(并且提取工作清晰),但如果它是总数的较大,我的计算要获取的剩余项目失败。

实际上,为了计算剩余的项目数,我从集合中的项目总数中减去当前索引 + 1(索引从零开始),这不起作用在所有条件下。

您是否知道如何计算正确的因素?非常感谢大家!

3 个答案:

答案 0 :(得分:0)

我相信你应该这样做:

items_to_fetch = min( current_index + fetch_size, total_count )

答案 1 :(得分:0)

怎么样:

items_to_fetch = max(0, min(fetch_size, total_count - current_index + 1))

还要确保在执行时获得当前总计数,而不是某些缓存值。

答案 2 :(得分:0)

感谢您的回答,但我找到了解决方案,这不是那么明显也不是那么简单:

index -> destination index (within the collection)
diff_to_index -> index - current_index
items_to_fetch -> (current_index + 1) + items_to_fetch >= total_count ? total_count - (current_index + 1) : max(diff_to_index, fetch_size)

干杯! :)