C# 从ID列表计算页码

C# 从ID列表计算页码,c#,C#,我正在分页一些数据,我有一个longs列表,其中包含数据集中每个元素的ID。现在,我有这样的想法: List<long> TheListOfIDs = {23,435,6635,4224,546,756,23,542....}; 这在所有情况下都有效吗 更新编辑:列表中的每个元素都是唯一的,函数中传递的ID肯定在列表中 我建议编写不同情况的单元测试。我想到的是: 第一页的第一页 最后一页的最后一页 第一页中间 中间页的第一页 中间页的最后一页 中间页中间 如果您的代码通过了这些

我正在分页一些数据,我有一个
long
s列表,其中包含数据集中每个元素的ID。现在,我有这样的想法:

List<long> TheListOfIDs = {23,435,6635,4224,546,756,23,542....};
这在所有情况下都有效吗


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

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

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

如果您的代码通过了这些测试,我认为您可以。

您应该检查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
}
public int getPage(列表id,长id)
{
int index=ids.indexOf(id);
如果(索引==-1)
return-1;//列表中不存在该id
return(index/20)+1;//页码应从索引1开始
}
使用:

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


PageBatchs的最后一个元素可能包含剩余的项目(您说位置2在第1页上,但2/20=0,所以不,它不起作用

但你可以做到

int ThePageNumber = (TheListOfIDs.IndexOf(TheID) + NumIDsInEachPage - 1) / NumIDsInEachPage ;

我不知道,但我投了更高的票来抵消它。无论如何,这不是一个糟糕的问题。对于重复的案例,如23,没有。@YasserZamani:我已经指定了;列表中的每个元素都是唯一的并且存在。@JamesJohnson“这不是一个糟糕的问题,无论如何”一点“你尝试了什么”并解释了哪些案例“这在所有情况下都有效吗?"是适用的。好的,谢谢;我发布了一个编辑:在函数中传递的ID肯定在列表中。如果列表只包含唯一的元素,并且列表中存在键,则您的表达式是正确的。还有一件事,我认为页码应该从索引1开始。只需在结果中添加1。我知道MoreLinq,但我不打算使用此库。好吧,如果你不想引用库,你可以复制函数,或者使函数与之相似,以符合你的目的。不使用它的任何具体原因。是的,它只是增加了一个依赖项,这是需要考虑的另一件事,所以如果可能的话,我宁愿避免这些。的确,但目前我正在考虑编写实现。而且,它我的建议(除了你没有要求的以外)是编写测试并使代码正常工作,而不是期望StackOverflow给你实现。
var pagebatches = TheListOfIDs.Batch(20);
int ThePageNumber = (TheListOfIDs.IndexOf(TheID) + NumIDsInEachPage - 1) / NumIDsInEachPage ;