internal class Program
{
static void Main(string[] args)
{
var sTotal = 1;
var total = 100;
for (var t = sTotal; t <= total; t++)
{
for (var i = 1; i <= t; i++)
{
var page = new Page(i, t);
Console.WriteLine(page.ToString());
}
}
var page1 = new Page(8, 8);
Console.WriteLine(page1.ToString());
Console.ReadKey();
}
}
public class Page
{
private const int PageItemCount = 7;
public int CurrentPageNo { get; set; }
public int TotalPages { get; set; }
private int _startPageNo { get; set; }
private int _endPageNo { get; set; }
private List<string> _items { get; set; } = new List<string>();
public Page(int currentPageNo, int totalPages)
{
CurrentPageNo = currentPageNo;
TotalPages = totalPages;
GenerateItems();
}
private void GenerateItems()
{
if (TotalPages == 0) return;
if (TotalPages <= PageItemCount)
{
_startPageNo = 1;
_endPageNo = TotalPages;
}
else
{
var middle = PageItemCount / 2 + 1;
if (CurrentPageNo <= middle)
{
_startPageNo = 1;
_endPageNo = PageItemCount;
}
else if (CurrentPageNo + middle - 1 >= TotalPages)
{
_startPageNo = TotalPages - PageItemCount + 1;
_endPageNo = TotalPages;
}
else
{
_startPageNo = CurrentPageNo - middle + 1;
_endPageNo = _startPageNo + PageItemCount - 1;
}
}
GeneratePrev();
GenerateFirstPage();
GenerateMoreBefore();
GeneratePageItems();
GenerateMoreAfter();
GenerateLastPage();
GenerateNext();
}
private void GeneratePrev()
{
if (CurrentPageNo > 1) _items.Add("prev");
}
private void GenerateFirstPage()
{
if (_startPageNo > 1) _items.Add("1");
}
private void GenerateMoreBefore()
{
if (_startPageNo > 2) _items.Add("more");
}
private void GeneratePageItems()
{
for (var pageNo = _startPageNo; pageNo <= _endPageNo; pageNo++)
{
_items.Add(pageNo.ToString());
}
}
private void GenerateMoreAfter()
{
if (TotalPages - _endPageNo >= 2) _items.Add("more");
}
private void GenerateLastPage()
{
if (_endPageNo + 1 <= TotalPages) _items.Add(TotalPages.ToString());
}
private void GenerateNext()
{
if (CurrentPageNo < this.TotalPages) _items.Add("next");
}
public override string ToString()
{
var sb = new StringBuilder();
foreach (var item in _items)
{
if (item == CurrentPageNo.ToString())
{
sb.Append($"\u001b[31m{item}\u001b[0m ");
}
else
{
sb.Append(item + " ");
}
}
return sb.ToString();
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律