Programming

C# List 배열 회전 시키기 - Right Rotation - Unity3D

DragonTory 2020. 3. 27. 15:54
반응형

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#

반응형