我试图通过指定数量的地点向右旋转列表。我认为数组(或列表)旋转可以看作是一个圆形,这意味着从末尾掉落的元素会回绕到开头,反之亦然。一个很好的例子可能是如果我们有一个数组或列表,然后我们将它向右旋转三个位置,结果将如下:
初始数组(或列表):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];
}
}
答案 0 :(得分:1)
以下是Linq
与Skip()
和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];
}