2

我在 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
........................

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

4

2 回答 2

2

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

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

以下是使用的功能:Skip Take

您的老师(?)可能不会接受这个答案,所以我建议您对自己的函数进行硬编码,该函数与Skipand相同Take

希望这可以帮助!

于 2012-09-12T05:58:35.110 回答
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;
}
于 2012-09-12T06:34:42.567 回答