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

本文关键字:位置 旋转 列表 | 更新日期: 2023-09-27 17:57:40

我正试图将列表向右旋转特定数量的位置。我认为数组(或List)的旋转可以被视为圆形,这意味着从末尾掉下来的元素会缠绕到开头,反之亦然。一个很好的例子可能是,如果我们有一个数组或列表,然后我们将其向右旋转三位,结果如下:

初始阵列(或列表):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];
    }
}

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

这里有一个使用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];
}