我在C#中有整数列表。我需要一种方法来提供startIndex
和step
参数,并从中获取子列表。到达结束时,交叉到列表的开头。 喜欢圈子
public List<int> GetSomeInt(List<int> mainList, int startIndex, int step )
{
...
}
例如,列表元素是 4,2,85,6,7,89,1,0,36,47,11,75 。我将startIndex=3
和step=5
提供给方法,我得到了如此结果:
result1 - 6, 7, 89, 1, 0
result2 - 36, 47, 11, 75, 4
result3 - 2, 85, 6, 7, 89, 1
result4 - 0, 36, 47, 11, 75
result5 - 4, 2, 85, 6, 7
result6 - 89, 1, 0, 36, 47
........................
我如何获得如此连续的列表子元素?
答案 0 :(得分:2)
这里有一些代码可以完成你想要实现的目标,你不应该把这些代码交给它,它只是一个指南:
public List<int> GetSomeInt(List<int> mainList, int startIndex, int step )
{
return mainList.Skip(startIndex).Take(step);
}
您的老师(?)可能不接受此答案,因此我建议您对自己的功能进行硬编码,其功能与Skip
和Take
相同。< / p>
希望这有帮助!
答案 1 :(得分:1)
您可以使用Queue
执行轮班,然后通过LINQ Take
获取结果
:
public static List<List<int>> GetSomeInt(List<int> mainList,
int startIndex, int step)
{
var queue = new Queue<int>();
mainList.ForEach(queue.Enqueue);
Enumerable.Range(0, startIndex)
.ToList()
.ForEach(i => queue.Enqueue(queue.Dequeue()));
var result = new List<List<int>>();
while (true)
{
var list = queue.Take(step).ToList();
list.ForEach(i => queue.Enqueue(queue.Dequeue()));
if (result.Any(l => l.All(list.Contains)))
break;
result.Add(list.ToList());
}
return result;
}