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