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

C#,将列表向右旋转指定位置,c#,arrays,rotation,C#,Arrays,Rotation,我试图将列表向右旋转一定数量的位置。我认为数组(或列表)的旋转可以看作是一个圆形,这意味着从末尾掉下来的元素会绕到开头,反之亦然。一个很好的例子可能是,如果我们有一个数组或列表,然后将其向右旋转三位,结果如下: 初始数组(或列表):20、30、40、50、60、70 向右旋转3个位置:50、60、70、20、30、40 我已经写了一些代码,基于我对这个概念的理解。我想知道,手动执行此操作的正确方法是什么(没有任何花哨的代码或LINQ),因为它将帮助我更好地理解它 我要的是解决这个问题的手动方法,

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

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

    }

}
public void Test8(列表项、整数位置)
{
int[]copy=newint[items.Count];
项目。复制到(复制,0);
对于(int i=0;i
下面是一个使用
Linq
Skip()
Take()
的方法

List iList=newlist(){20,30,40,50,60,70};
int=3;
List 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];
}
int[]items=newint[]{20,30,40,50,60,70};
int[]结果=新的int[items.Length];
int=3;
对于(int i=0;i
这怎么可能适用于项目。在循环中计数而不是项目。长度?@Dyrus使用
.Count()
而不是
。长度
这是相同的结果-但是
.Count()
系统的一部分。Linq.Enumerable
并且你想要一个没有
Linq
的解决方案,我在你发布的内容中看不到任何花哨的代码。以上大部分都可以用C或C++编写,这里值得参考。
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];
}