如何从C#列表中连续获取元素?

时间:2012-09-12 05:46:14

标签: c#

我在C#中有整数列表。我需要一种方法来提供startIndexstep参数,并从中获取子列表。到达结束时,交叉到列表的开头。 喜欢圈子

public List<int> GetSomeInt(List<int> mainList, int startIndex, int step )
{
  ...
}

例如,列表元素是 4,2,85,6,7,89,1,0,36,47,11,75 。我将startIndex=3step=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
........................

我如何获得如此连续的列表子元素?

2 个答案:

答案 0 :(得分:2)

这里有一些代码可以完成你想要实现的目标,你不应该把这些代码交给它,它只是一个指南:

public List<int> GetSomeInt(List<int> mainList, int startIndex, int step )
{
    return mainList.Skip(startIndex).Take(step);
}

以下是使用的功能:Skip Take

您的老师(?)可能接受此答案,因此我建议您对自己的功能进行硬编码,其功能与SkipTake相同。< / 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;
}