从 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;
}
结果截图:
适用与轮播图,一次只位移一个。
有优化空间,有见解的同学,欢迎留言!欢迎指导,不胜感激!
个人学习,不喜勿喷,谢谢!