본문 바로가기
유니티

[유니티 C#]List 정렬 Sort 이용하기

by 와이키키박사 2021. 5. 19.

List.Sort() 람다식 이용

 class SortData
    {
        public int index;
        public int sortNum;
    }
    List<SortData> sortDataList = new List<SortData>();

    private void Start()
    {
        int random = 0;

        for (int i = 0; i < 5; i++)
        {
            SortData sortData = new SortData();
            random = Random.Range(0, 100);
            sortData.index = i;
            sortData.sortNum = random;
            sortDataList.Add(sortData);
        }

        int noSortCount = sortDataList.Count;
        for (int i = 0; i < noSortCount; i++)
        {
            Debug.LogError("index : " + sortDataList[i].index + "sortNum : " + sortDataList[i].sortNum);
        }

        Debug.LogError("-------------------------------------------------");
        sortDataList.Sort(Sort);
        Debug.LogError("-------------------------------------------------");

        int sortCount = sortDataList.Count;
        for (int i = 0; i < sortCount; i++)
        {
            Debug.LogError("index : " + sortDataList[i].index + "sortNum : " + sortDataList[i].sortNum);
        }
    } 

    int Sort(SortData A, SortData B)
    {
        if (A.sortNum < B.sortNum) return -1;
        else if(A.sortNum > B.sortNum) return 1;
        else
        {
            if (A.index < B.index) return -1;
            else if (A.index > B.index) return 1;
        }

        return 0;
    }

이러한 방식으로도 작성 가능

        sortDataList.Sort(delegate (SortData A, SortData B)
         {
              if (A.sortNum < B.sortNum) return -1;
              else if (A.sortNum > B.sortNum) return 1;
              else
              {
                  if (A.index < B.index) return -1;
                  else if (A.index > B.index) return 1;
              }

             return 0;
         });

리스트 소팅할때 delegate로 소팅 조건을 적거나 함수를 따로 작성하여 소팅 조건을 사용할수있다

오름차순과 내림차순이 가능하다