C# List 배열 회전 시키기 - Right Rotation - Unity3D
C# List - Right Rotation - Unity3D
간혹 List<> 를 사용 하다가 환영큐 처럼 특정 요소 이후로 모든 요소를 재배치 시킬 일이 있다.
예) 1 2 3 4 5 -> Rotate in place (3) -> 3 4 5 1 2
이럴때 다음의 Extension Method를 사용 하면 된다.
public static void Rotate(this List src, T item)
{
int index = src.LastIndexOf(item);
src.Rotate(index);
}
public static void Rotate(this List src, int index)
{
int count = src.Count - index;
for (; count > 0; count--)
{
T tmp = src[src.Count - 1];
for (int i = src.Count - 1; i > 0; i--)
{
src[i] = src[i - 1];
}
src[0] = tmp;
}
}
예)
List<int> numberList = new List<int>() { 1, 2, 3, 4, 5, 6 };
numberList .Rotate(3);
numberList.ForEach(x=>Debug.Log(x));
다음과 같이 Skip과 Take를 사용 해서 Rotate 시키는 방법도 있으나 메모리 할당이 자주 일어 날 것 같아서 위의 메소드를 사용 하고 있다.
List<int> de = new List() { 1, 2, 3, 4, 5, 6 };
List<int> fe = de.Skip(2).ToList();
fe.AddRange(de.Take(2));
fe.ForEach(x=>Debug.Log(x));
Right Rotation of array in c#
Array Right Rotation c#