0

我正在分页一些数据,并且我有一个longs 列表,其中包含数据集中每个元素的 ID。现在,我有这样的事情:

List<long> TheListOfIDs = {23,435,6635,4224,546,756,23,542....};

TheListOfIDs实际上包含数千个 ID。每页数据包含 20 个元素。我正在编写一个函数,它接收 along并返回 ID 所在的页码。例如,在示例数据中,ID 号435位于第二个位置,因此它是前 20 个元素的一部分,因此位于第 1 页。

如果我写

int ThePageNumber = TheListOfIDs.IndexOf(TheID) / 20;

这在所有情况下都有效吗?

更新编辑:列表中的每个元素都是唯一的,并且函数中传递的 ID 肯定在列表中!

4

4 回答 4

0

您应该检查 id 列表中不存在 id 的情况。这是Java代码:

public int getPage(List<Long> ids, Long id)
{
    int index = ids.indexOf(id);
    if (index == -1) 
        return -1; // the id does not exist in the list
    return (index / 20) + 1; // the page number should start from index 1
}
于 2012-05-15T14:06:52.887 回答
0

使用MoreLinq批次

var pagebatches = TheListOfIDs.Batch(20);

pagebatch 的元素最多包含 20 个项目。每个项目对应一个页码。

pagebatches 的最后一个元素可能包含剩余的项目 (<=20)。

于 2012-05-15T14:08:22.973 回答
0

我建议编写不同案例的单元测试。我想到的是:

  • 第一页的第一页
  • 最后一页的最后
  • 第一页中间
  • 中间页的第一页
  • 中间页最后
  • 中间页中间

如果你的代码通过了这些测试,我认为你没问题。

于 2012-05-15T14:00:21.860 回答
0

你说位置 2 在第 1 页上,但是 2/20 = 0,所以不,它不会起作用。

但你可以做

int ThePageNumber = (TheListOfIDs.IndexOf(TheID) + NumIDsInEachPage - 1) / NumIDsInEachPage ;
于 2012-05-15T14:21:51.933 回答