C#,按指定位置向右旋转列表

时间:2016-07-19 07:17:12

标签: c# arrays rotation

我试图通过指定数量的地点向右旋转列表。我认为数组(或列表)旋转可以看作是一个圆形,这意味着从末尾掉落的元素会回绕到开头,反之亦然。一个很好的例子可能是如果我们有一个数组或列表,然后我们将它向右旋转三个位置,结果将如下:

初始数组(或列表):20,30,40,50,60,70

向右旋转3个位置:50,60,70,20,30,40。

我根据我对这个概念的理解,编写了一些代码。我想知道,手动执行此操作的正确方法是什么(没有任何花哨的代码或LINQ),因为它可以帮助我更好地理解它。

我要求手动解决这个问题的方法,而不是任何花哨的东西。

public void Test8(List<int> items, int places)
{
    int[] copy = new int[items.Count];
    items.CopyTo(copy, 0);

    for (int i = 0; i < items.Count; i++)
    {
        int RotateRight = (i + places) % items.Count;
        items[i] = copy[RotateRight];

    }

}

1 个答案:

答案 0 :(得分:1)

以下是LinqSkip()Take()的合并。

List<int> iList = new List<int>() { 20, 30, 40, 50, 60, 70 };
int rotate = 3;
List<int> lResult = iList.Skip(rotate).Concat(iList.Take(rotate)).ToList();

使用简单循环的另一种方法

int[] items = new int[] { 20, 30, 40, 50, 60, 70 };
int[] result = new int[items.Length];
int rotate = 3;

for (int i = 0; i < items.Length; i++)
{
    result[i] = items[(i+rotate)% items.Length];
}