본문 바로가기
ぺ Let's do it ぺ/⒈유니티(Unity3d)

[별아재군/unity2d] string 문자열로 저장된 List<Exam>형 클래스 Sort 정렬하기..

by 망고부인 2021. 10. 5.
728x90

[별아재군/unity2d] string 문자열로 저장된 List<Exam>형 클래스 Sort 정렬하기..

List의 직렬화 및 Json 저장 때문에
클래스 멤버를 모두 string형으로 구성을 했더니..
List형 exam.Sort() 기능을 제대로 사용하지 못하는 문제가 있어서 고민하다가 다른 방법을 찾은 듯 합니다..

List<exam> exam 문제점을 예를들면..
행     string형(speed)   string형(attorder)
[0]     1     0
[1]     5     0
[2]     9     0
[3]     31     0
[4]     71     0
Exam.Sort()하면.. (옵션 생략)
1   31   5   71   9 순으로 정렬되고 int형일때와 string형의 결과가 다름니다..

그래서, 수작업으로 직접 Sort 정렬 스크립트를 작성해 봤어요..

List PlyerList
string형(speed)   string형(AttackOrder)   string형(TempOrder)

이라고 가정하고나서..

먼저 speed 값을 기준으로 정렬합니다..
int.Pase(exam[a].speed)와 a.Tostring() 등은 생략, 알아서 이해하는 걸로.

 

        for (int a = 0; a < PlyerList.Count; a++)
        {
            for (int b = 0; b < PlyerList.Count; b++)
            {
                if (int.Parse (PlyerList[a].Speed) < int.Parse (PlyerList[b].Speed))
                {
                    int TempOrder = int.Parse(PlyerList[a].AttackOrder);
                    TempOrder++;
                    PlyerList[a].AttackOrder = TempOrder.ToString();
                }
            }
        }

라고 하면 결과는,

가 됩니다..

첫번째, 여기서 추가적으로,

 

        int CountOrder = 0;
        for (int a = 0; a < PlyerList.Count; a++)
        {
            for (int b = 0; b < PlyerList.Count; b++)
            {
                if (PlyerList[b].AttackOrder == a.ToString())
                {
                    PlyerList[b].TempOrder= CountOrder.ToString();
                    CountOrder++;
                }
            }
        }

라고 하면 결과는,

이렇게 결과가 저장되고..
이걸 다시 이중 반복문으로 Add()와 RemoveAt(), TrimExcess()를 활용해서..

다시 원래 가정에서
정렬한 후에 ~라고 하면 결과는,

List PlyerList
string형(speed)   string형(AttackOrder)   string형(TempOrder)

에서
두번째, 약간 수정해서 추가적으로,

        for (int a = 0; a < PlyerList.Count; a++)
        {
            for (int b = 0; b < PlyerList.Count; b++)
            {
                if (PlyerList[b].AttackOrder == a.ToString())
                {
                    PlyerList.Add( PlyerList[b] );
                    PlyerList.RemoveAt( PlyerList[b] );
                }
            }
        }

PlyerList.TrimExcess();

라고 하면 결과는,

이렇게 나올 것으로 기대되는데 될려나..

PlyerList.TrimExcess(); 때문에..

0 ~ 5행은 삭제가 되고..

6 -> 0 ~ 11 -> 5 로 변경될 것으로 예상됩니다..


아니면 중에 TempExam 를 넘어서 3각 치환을 활용하던가..
.
.
.

728x90

댓글