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