C# 自定义分页问题

C# 自定义分页问题,c#,algorithm,C#,Algorithm,我正在创建一个自定义分页解决方案,但我正在努力想出一个算法来解决这个问题 我需要创建一个索引位置,例如1 2 3 4 5(其中1表示所选索引)。当您考虑到我需要应用一个上限时,这显然会变得更加复杂,例如,如果有10个页面,当前选择的索引是8,那么我希望包含6 7 8 9 10。如果我们选择最后一页的位置,则会变成6 7 8 9 10 有人能为我指出正确的方向吗?我正在努力准确地知道我甚至可以搜索什么来找到答案。这并不完美,但你应该明白其中的道理。基本上,您只需确保使用if-else逻辑正确地迭代

我正在创建一个自定义分页解决方案,但我正在努力想出一个算法来解决这个问题

我需要创建一个索引位置,例如1 2 3 4 5(其中1表示所选索引)。当您考虑到我需要应用一个上限时,这显然会变得更加复杂,例如,如果有10个页面,当前选择的索引是8,那么我希望包含6 7 8 9 10。如果我们选择最后一页的位置,则会变成6 7 8 9 10


有人能为我指出正确的方向吗?我正在努力准确地知道我甚至可以搜索什么来找到答案。

这并不完美,但你应该明白其中的道理。基本上,您只需确保使用if-else逻辑正确地迭代,并考虑开始/停止点

public List<int> GetIndices(int min, int current, int count, int max)
{
    List<int> indexes = new List<int>();
    int half = count / 2

    if(current - (half) < min)
    {
        for(int i = 0; i < count && i < max; i++)
        {
            indexes.add(i);
        }
    }
    else if(current + (half) > max)
    {
        for(int i = 0; i < count && max - i > 0; i++)
        {
            indexes.add(max - i);
        }
    }
    else
    {
        for(int i = 0; i < count; i++)
        {
            indexes.add(current - half + i)
        }
    }

    return indexes;
}
public List getindex(int-min、int-current、int-count、int-max)
{
列表索引=新列表();
int half=计数/2
如果(电流-(一半)最大值)
{
对于(int i=0;i0;i++)
{
添加索引(max-i);
}
}
其他的
{
for(int i=0;i
假设您总共有
索引
(在您的情况下为10个)和
索引显示的可显示量
(5),您可以计算以下内容:

firstIndex = max(1, selectedIndex - indexDisplay/2);
lastIndex = firstIndex + indexDisplay - 1;
if (lastIndex > indexTotal) {
    lastIndex = indexTotal;
    firstIndex = max(1, lastIndex - indexDisplay + 1);
}
e、 g

  • selectedIndex=1
    产生
    firstIndex=1;lastIndex=5
  • selectedIndex=8
    产生
    firstIndex=6;lastIndex=10
  • selectedIndex=10
    产生
    firstIndex=6;lastIndex=10

    • 这是我的看法。它与非常类似,只是它使用扩展方法,并且当要显示的页面数高于总页面数时,它不会失败

      public IEnumerable<int> GetDisplayedPages(int currentPage, 
                                                int totalPages, 
                                                int pagesToDisplay)
      {
          if (totalPages <= pagesToDisplay) {
              return Enumerable.Range(1, totalPages);
      
          } else {
              if (pagesToDisplay % 2 == 1) pagesToDisplay -= 1;
      
              if (currentPage - (pagesToDisplay / 2) <= 0) {
                  return Enumerable.Range(1, pagesToDisplay + 1);
              } else if (currentPage + (pagesToDisplay / 2) >= totalPages) {
                  return Enumerable.Range(totalPages - pagesToDisplay, pagesToDisplay + 1);
              } else {
                  return Enumerable.Range(Convert.ToInt32(currentPage - (pagesToDisplay / 2)), pagesToDisplay + 1);
              }
          }
      }
      
      public IEnumerable GetDisplayedPages(int-currentPage,
      整版,
      int pagesToDisplay)
      {
      如果(totalPagesMy try:

      IEnumerable<int> GetIndices(int min, int current, int count, int max)
      {
          int delta = current > max - count? current - (max - count) : count / 2;         
          int start = Math.Max(min, current - delta);
          int end = Math.Min(max, start + count);
          for (int i=start; i <= end; i++) yield return i;
      }
      
      IEnumerable GetIndex(最小整数、当前整数、计数整数、最大整数)
      {
      int delta=当前>最大计数?当前-(最大计数):计数/2;
      int start=Math.Max(最小值,当前值-增量);
      int end=Math.Min(最大,开始+计数);
      对于(int i=开始;i max-count?当前-(max-count):计数/2;
      int start=Math.Max(最小值,当前值-增量);
      int end=Math.Min(最大,开始+计数);
      
      对于(int i=start;i=min和x max)。我计算开始。它是当前位置减去一个增量。增量是count/2,除非当前在顶部计数项目中,否则它会被调整。结束是start+count。从那里开始,它是迭代。

      尝试在此处搜索“分页”。它返回大量结果(你应该在输入问题时看到上面的内容)。其中一个肯定会帮你指出正确的方向。很好,对我有用。我刚刚修改了返回的页面,以显示“第一个”和“最后一个”链接。
      List<int> GetIndices(int min, int current, int count, int max)
      {   
          List<int> list = new List<int>();     
          int delta = current > max - count? current - (max - count) : count / 2;         
          int start = Math.Max(min, current - delta);
          int end = Math.Min(max, start + count);
          for (int i=start; i <= end; i++) list.Add(i);
          return list;
      }