gpt4 book ai didi

c# - 取 n 个元素。结束的从头开始

转载 作者:行者123 更新时间:2023-12-03 15:22:34 27 4
gpt4 key购买 nike

如何从 m 个元素集合中取出 n 个元素,以便在元素用完时从头开始?

List<int> list = new List<int>() {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
List<int> newList = list.Skip(9).Take(2).ToList();
List<int> expected = new List(){10,1};

CollectionAssert.AreEqual(expected, newList);

我怎样才能得到预期的列表?
我正在寻找一个 CircularTake() 函数或那个方向的东西。

最佳答案

您不需要跟踪溢出,因为我们可以使用 %取模运算符(返回整数除法的余数)以不断循环遍历一系列索引,并且它将始终返回集合中的有效索引,并返回到 0当它结束时(这将适用于列表末尾的多次环绕):

List<int> list = new List<int> {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
List<int> newList = new List<int>();

for (int skip = 9, take = 2; take > 0; skip++, take--)
{
newList.Add(list[skip % list.Count]);
}

结果:
// newList == { 10, 1 }

enter image description here

这可以提取到扩展方法中:
public static List<T> SkipTakeWrap<T>(this List<T> source, int skip, int take)
{
var newList = new List<T>();

while (take > 0)
{
newList.Add(source[skip % source.Count]);
skip++;
take--;
}

return newList;
}

然后它可以被称为:
List<int> list = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
List<int> newList = list.SkipTakeWrap(9, 2);

关于c# - 取 n 个元素。结束的从头开始,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62330498/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com