《List》之循环遍历 ----轮播图取数据

这篇博客介绍了一个C#代码示例,用于从列表中按指定步长循环获取元素。当剩余数量不足步长时,它会从列表开头重新开始。这个方法适用于轮播图等需要循环显示数据的场景。博主提供了完整代码并邀请读者优化和提出建议。
摘要由CSDN通过智能技术生成

从 List 中获取指定步长的元素,循环获取,当剩余数量不足步长时,从头开始查询遍历。不作赘述,直接展示:

public Button btn;

    /// <summary>
    /// 所有数据
    /// </summary>
    private List<int> totalList;
    
    /// <summary>
    /// 获取数据条数
    /// </summary>
    public int step;

    /// <summary>
    /// 当前页数:不需要翻页处理的,可以忽略
    /// </summary>
    private int PageIndex = 1;

    /// <summary>
    /// 起始位置
    /// </summary>
    private int startIndex = 0;

    /// <summary>
    /// Log打印使用,可以忽略
    /// </summary>
    private int count = 0;

    /// <summary>
    /// 是否超出过上限
    /// </summary>
    private bool isLimit = false;

    void Start()
    {
        btn.onClick.AddListener(OnGetResult);

        totalList = new List<int>();
        for (int i = 0; i < 7; i++)
        {
            totalList.Add(i);
        }
        // 初始化获取条数
        step = 5;
    }
    
    void OnGetResult()
    {
        count += 1;
        var result = GetList(totalList, step);
        PageIndex++;
        startIndex++;
        Debug.LogError(string.Format("第[{0}]次  {1}, {2}, {3}, {4}, {5}", count, result[0], result[1], result[2], result[3], result[4]));
    }
    List<int> GetList(List<int> list, int step)
    {
        // 获取数据缓存容器
        List<int> result = new List<int>();
        int allCount = totalList.Count;
        int length = step + startIndex;

        for (int i = startIndex; i < length; i++)
        {
            if (startIndex > allCount)
            {
                length = step - result.Count;
                i = 0;
                startIndex = 1;
                PageIndex = 0;
                // 重置之前添加第一个元素
                result.Add(totalList[1]);
                isLimit = true;
            }
            else
            {
                if (i < allCount)
                {
                    // 区分是否之前超出过列表索引,再次添加时,索引+1
                    if (isLimit)
                        result.Add(totalList[i + 1]);
                    else
                        result.Add(totalList[i]);
                }
                else
                {
                    // 超出总数时,重新从第一条开始获取,并添加到容器
                    length = startIndex + step;
                    int addCount = length - allCount;
                    
                    for (int j = 0; j < addCount; j++)
                        result.Add(totalList[j]);
                    break;
                }
            }
        }
        // 重置限制状态
        isLimit = false;
        return result;
    }

结果截图:

        

 

适用与轮播图,一次只位移一个。

有优化空间,有见解的同学,欢迎留言!欢迎指导,不胜感激!

个人学习,不喜勿喷,谢谢!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值