关于算法的一点想法???

qingYun1029 2011-03-25 04:19:30
今天再次感到来自算法的压力!!!
悲痛之情难以言表...


想当初写一个分页,冥思苦想两天,
得出一个公式——PageIndex*PageSize+PageSize,
即找出PageIndex*PageSize——PageIndex*PageSize+PageSize之间的数据即可(个人认为这是最重要一环),
比起刚开始想象各种各样的情况,抓破脑壳,套用N多的if语句,狂汗不已...


今天再次倒在“分页”的脚下...
http://topic.csdn.net/u/20110325/12/0f492caa-da30-46ee-aa87-2f09d7d7370c.html

得出的结论:
算法——“在圈子里面玩游戏”,或者说“在圈子里面找规则”。
想要“在圈子里面”,则必须找到这个“圈子”的“零界点”(不知道这样描述好不好),即需要排除一些特殊的情况。
“找规则”则不言而喻了。

已经语无伦次了,求大师指点!!!
欢迎大家一起探讨!!!!
...全文
360 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
qingYun1029 2011-03-26
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 shalves 的回复:]
就这个效果,我说说我的理解啊。

其实,每次排列页码,都需要知道最多六个值, 就六个来说,其中有四个是,分别是最前两页,和最后两页

但是从你的代码里,我还没看到时算法的影子。这所谓的算法其实就是计算这六个值是多少。
总纪录数,每页显示记录数,得出总页数,然后用总页数和当前页数计算并得出这六个值分别是多少。
算法是数值计算的方法,不是流程方法!

这是我的理解。
[/Quote]

谢谢你!
这个效果已经可以了,我需要的类似这样的效果就好了。。
算法我指的是7楼的朋友给的那段代码。。

public static PageRange GetPageRange(int currentPageIndex, int pageCount, int displayCount)
{
PageRange range;

if (pageCount <= displayCount)
{
range = new PageRange(1, pageCount);
}
else
{
int midPageIndex = (int)(displayCount / 2);

if (currentPageIndex <= (midPageIndex + 1))
{
range = new PageRange(1, displayCount);
}
else if (currentPageIndex > (pageCount - midPageIndex))
{
range = new PageRange(pageCount - displayCount + 1, pageCount);
}
else
{
range = new PageRange(currentPageIndex - midPageIndex, currentPageIndex + displayCount - midPageIndex - 1);
}
}
return range;
}

Shalves 2011-03-26
  • 打赏
  • 举报
回复


就这个效果,我说说我的理解啊。

其实,每次排列页码,都需要知道最多六个值, 就六个来说,其中有四个是,分别是最前两页,和最后两页

但是从你的代码里,我还没看到时算法的影子。这所谓的算法其实就是计算这六个值是多少。
总纪录数,每页显示记录数,得出总页数,然后用总页数和当前页数计算并得出这六个值分别是多少。
算法是数值计算的方法,不是流程方法!

这是我的理解。
chen_ya_ping 2011-03-26
  • 打赏
  • 举报
回复
想要写好一个方法还是需要花很大的心思的啊。
Shalves 2011-03-26
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 qingyun1029 的回复:]
引用 10 楼 karascanvas 的回复:
C# code


public struct PageRange
{
public int PageFrom { get; set; }

public int PageTo { get; set; }

public PageRange(int from, int to) : this()
{
……


要的结果出……
[/Quote]

你这个不对,人家tb的最后是显示两个页码
qingYun1029 2011-03-26
  • 打赏
  • 举报
回复
昨天帖的代码有一点点问题,更新一下。

using System;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;

public partial class _Default : System.Web.UI.Page
{
int countPage = 100;
int dispPage = 9;
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
for (int i = 1; i <= countPage; i++)
{
Response.Write(GetLinksHTML(i, countPage, dispPage) + "<br/>");
}
}
}

private string GetLinksHTML(int currentPage, int countPage, int dispPage)
{
string resultLinks = string.Empty;
PageRange range = Pager.GetPageRange(currentPage, countPage, dispPage);

if (range.PageFrom == 2)
{
resultLinks += "<a href='#'>" + 1 + "</a> ";
}
else if (range.PageFrom > 2)
{
resultLinks += "<a href='#'>" + 1 + "</a>...";
}

for (int i = range.PageFrom; i <= range.PageTo; i++)
{
if (i == currentPage)
{
resultLinks += currentPage + " ";
continue;
}
resultLinks += "<a href='#'>" + i + "</a> ";
}

if(range.PageTo == countPage - 1)
{
resultLinks += "<a href='#'>" + countPage + "</a>";
}
else if (range.PageTo < countPage)
{
resultLinks += "..." + "<a href='#'>" + countPage + "</a>";
}
return resultLinks;
}
}

shichao102471077 2011-03-26
  • 打赏
  • 举报
回复
恭喜楼主、
qingYun1029 2011-03-25
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 wxr0323 的回复:]
引用 17 楼 qingyun1029 的回复:

总结:
将问题细化,如果还不明白,再细化……
1:找出显示的范围
2:头尾只是补上
3:哎,又被打击了……
4:没关系,再接再厉!!!

有总结才会进步。。
[/Quote]
子夜__ 2011-03-25
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 qingyun1029 的回复:]

总结:
将问题细化,如果还不明白,再细化……
1:找出显示的范围
2:头尾只是补上
3:哎,又被打击了……
4:没关系,再接再厉!!!
[/Quote]
有总结才会进步。。
qingYun1029 2011-03-25
  • 打赏
  • 举报
回复
总结:
将问题细化,如果还不明白,再细化……
1:找出显示的范围
2:头尾只是补上
3:哎,又被打击了……
4:没关系,再接再厉!!!


qingYun1029 2011-03-25
  • 打赏
  • 举报
回复
啦,啦啦,啦啦~~~~

哟呵!!!
qingYun1029 2011-03-25
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 karascanvas 的回复:]
C# code


public struct PageRange
{
public int PageFrom { get; set; }

public int PageTo { get; set; }

public PageRange(int from, int to) : this()
{
……
[/Quote]

要的结果出来了。非常感谢!!


效果图



代码

using System;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;

public partial class _Default : System.Web.UI.Page
{
int countPage = 100;
int dispPage = 9;
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
for (int i = 1; i <= countPage; i++)
{
Response.Write(GetLinksHTML(i, countPage, dispPage) + "<br/>");
}
}
}

private string GetLinksHTML(int currentPage, int countPage, int dispPage)
{
string resultLinks = string.Empty;
PageRange range = Pager.GetPageRange(currentPage, countPage, dispPage);

if (range.PageFrom > 2)
{
resultLinks += "<a href='#'>" + 1 + "</a>...";
}

for (int i = range.PageFrom; i <= range.PageTo; i++)
{
if (i == currentPage)
{
resultLinks += currentPage + " ";
continue;
}
resultLinks += "<a href='#'>" + i + "</a> ";
}

if (range.PageTo < countPage)
{
resultLinks += "..." + "<a href='#'>" + countPage + "</a>";
}
return resultLinks;
}
}


谢谢大家!!!
qingYun1029 2011-03-25
  • 打赏
  • 举报
回复
为感谢大家,推荐最近看过的几部好电影。
都是泰国的 :-D

强烈推荐
《初恋这件小事》——有点雏菊的味道,不过更纯。里面有几首非常好听的歌曲《日期》……
《小情人》——两个小孩子的友谊,“点到为止”,个人认为可以运用到每个人身上……
《初三大四我爱你》——一点点悲情……
qingYun1029 2011-03-25
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 karascanvas 的回复:]

C# code


public struct PageRange
{
public int PageFrom { get; set; }

public int PageTo { get; set; }

public PageRange(int from, int to) : this()
{
……
[/Quote]

有点意思,看看能不能改改!!
谢谢了,妹子!!!
qingYun1029 2011-03-25
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 karascanvas 的回复:]

C# code


public struct PageRange
{
public int PageFrom { get; set; }

public int PageTo { get; set; }

public PageRange(int from, int to) : this()
{
……
[/Quote]
再次感谢!!!
种草德鲁伊 2011-03-25
  • 打赏
  • 举报
回复


public struct PageRange
{
public int PageFrom { get; set; }

public int PageTo { get; set; }

public PageRange(int from, int to) : this()
{
PageFrom = from;
PageTo = to;
}

}

qingYun1029 2011-03-25
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 karascanvas 的回复:]

我现在用的方法,用来获取需要显示的页码范围,给楼主参考一下

C# code


public static PageRange GetPageRange(int currentPageIndex, int pageCount, int displayCount)
{
PageRange range;

if ……
[/Quote]

PageRange 类呢???
qingYun1029 2011-03-25
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 karascanvas 的回复:]

我现在用的方法,用来获取需要显示的页码范围,给楼主参考一下

C# code


public static PageRange GetPageRange(int currentPageIndex, int pageCount, int displayCount)
{
PageRange range;

if ……
[/Quote]

谢谢啦!!!
种草德鲁伊 2011-03-25
  • 打赏
  • 举报
回复
我现在用的方法,用来获取需要显示的页码范围,给楼主参考一下



public static PageRange GetPageRange(int currentPageIndex, int pageCount, int displayCount)
{
PageRange range;

if (pageCount <= displayCount)
{
range = new PageRange(1, pageCount);
}
else
{
int midPageIndex = (int)(displayCount / 2);

if (currentPageIndex <= (midPageIndex + 1))
{
range = new PageRange(1, displayCount);
}
else if (currentPageIndex > (pageCount - midPageIndex))
{
range = new PageRange(pageCount - displayCount + 1, pageCount);
}
else
{
range = new PageRange(currentPageIndex - midPageIndex, currentPageIndex + displayCount - midPageIndex - 1);
}
}
return range;
}

潮起潮落 2011-03-25
  • 打赏
  • 举报
回复
mssql要用top吧。
前十条top10
第10-20先取top10然后再取top20,用where再取到不等于top10的十个。
依次....
mysql有一个limit。
qingYun1029 2011-03-25
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 karascanvas 的回复:]

楼主的是什么问题,是不懂让数据分页,还是不会显示那些个链接?
我不知道为啥大家都把这两个问题放在一起...
[/Quote]

现在应该是不知道该如何分页,即如何输出页码的HTML代码,
已知条件,如
100个页码,
一次只能显示11个,
其余的规则就类似于“京东”的那个了。。
上面有我提问帖子的连接,请帮忙看看。。。
加载更多回复(4)

62,041

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧