- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
假设我有一些神奇的分页黑盒类,它使用 pageIndex
和 pageSize
检索数据,如下所示:
public class PaginatedList<T>
{
// ...
// Chops up the internally stored list into pages of size "pageSize",
// then returns the page stored at index "pageIndex".
public IEnumerable<T> Get(int pageIndex, int pageSize)
{
// Magic black box code goes here.
}
// ...
}
现在假设我有一个驱动类想要使用这个PaginatedList
类,但是想通过使用skip
和take
来实现分页参数。当然,如果我想要跳过
的偏移量恰好可以被我想要take
的数量整除,那么我可以通过执行如下操作来实现:
public class MyDriver
{
// Bypass the first "skip" elements and return the next "take" elements.
static IEnumerable<T> OffsetGet(PaginatedList<T> myList, int skip, int take)
{
// ASSERT: skip % take == 0 is true.
return myList.Get(skip/take, take);
}
static void Main(string[] args)
{
// ...
// From some dataSource, store some strings in a fancy PaginatedList.
var myList = new PaginatedList<string>(dataSource);
// Skip the first 20 strings and take the next 5 strings.
var myData = OffsetGet(myList, 20, 5);
// ...
}
}
但我还能如何有效地实现 OffsetGet(myList, skip, take)
(也就是说,无需进行多次 Get(pageIndex, pageSize)
调用)我想要跳过
的偏移量不能被我想要接受
的数量整除的情况?
如果这个问题已经在某个地方得到回答或者上面的代码太模糊,我们深表歉意;这是我在 StackOverflow 上的第一个问题,所以请保持温和。 =]
最佳答案
注意:此答案存在重大问题(已被接受,因此无法删除)- 例如跳过 28 次,拍摄 5 次。不幸的是,我没有时间解决这个问题。
这在一定程度上取决于您希望在多大程度上平衡代码复杂性和数据获取效率。
您总是可以通过获取两倍于您需要的数据来取得成功:
int virtualTake = take * 2;
int virtualSkip = skip / virtualTake;
var bigList = Get(myList, virtualSkip, virtualTake);
int offset = virtualSkip % take;
var pruned = bigList.Skip(offset).Take(take);
但是,在许多情况下,这将获取比您需要的更多的数据。您可以至少针对skip
已经是take
的倍数的情况进行优化,但在其他情况下您可以改进。
例如,如果您想跳过 23 并取 5,上面的代码将有效地跳过 20 并取 10,然后修剪...但您可以跳过 21取而代之的是 7。代码基于以下评论中 astander 的建议:
int newTake = take;
while ((skip % newTake) + take > newTake)
{
newTake++;
}
var bigList = Get(myList, skip / newTake, newTake);
int offset = skip % newTake;
var pruned = bigList.Skip(offset).Take(take);
关于c# - 当 skip 不能被 take 整除时,通过 pageIndex/pageSize 分页实现 skip/take 分页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24133629/
我通过以下方法在我的应用程序中使用 UIPageViewController: -(ChildViewController *)viewControllerAtIndex:(NSUInteger)in
我在更新面板中有一个 gridview 和一个绑定(bind)了点击 gridview 的按钮。 当我点击 Change button
我有一个 ListView,我正在使用 DataPager 进行分页。我想在 Page_Load 上设置寻呼机的初始页面。我已经尝试过 DataPager.SetPageProperties 方法,但
我正在实现一个包含服务器端分页的 react 表组件,我还需要对列进行排序。 但是我观察到奇怪的行为。当我仅使用分页并单击下一页时,pageIndex 会增加。 但是,当我添加排序 Hook 时,分页
从此SO post我了解到,为了处理大型数据集,您应该在 ngAfterViewInit 中设置 dataSource.paginator before dataSource.data。 但是,在执行
我正在使用 Angular Material 数据表来显示可以添加到的对象列表。将对象添加到数据源时,页面索引中断并显示负数。我发现解决此问题的唯一方法是将 Material 分页器的页面索引重置为
我希望 Angular 的分页器在页面刷新时从第二页开始,但我遇到了这个错误 ERROR TypeError: Cannot set property 'pageIndex' of undefined
我希望 Angular 的分页器在页面刷新时从第二页开始,但我遇到了这个错误 ERROR TypeError: Cannot set property 'pageIndex' of undefined
假设我有一些神奇的分页黑盒类,它使用 pageIndex 和 pageSize 检索数据,如下所示: public class PaginatedList { // ... // Ch
我是一名优秀的程序员,十分优秀!