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#
'Programming' 카테고리의 다른 글
C# DateTime Now에서 날짜만 가져 오기 (0) | 2020.07.17 |
---|---|
Androi NDK를 이용한 C++ 라이브러리 char 형 문제 해결 signed char 와 unsigned char 형에 대한 지정 - Android Studio (0) | 2020.05.27 |
C# - class 객체 배열 new 할당 후 배열 요소 null 접근 문제 해결 (0) | 2020.03.14 |
C# - Enum 형의 내부 형식 변경과 유용한 메소드 - byte (0) | 2020.03.13 |
Smart Card에서 Card Number 읽어 오기 (1) | 2020.02.19 |