[C#] 리스트 정렬 (람다, 대리자)

0시0분·2022년 5월 15일
0

C#

목록 보기
1/9

정렬조건
1순위) 좋아하는 영웅
2순위) id 빠른 순(오름차순)

람다

heros.Sort((Hero a, Hero b) => {
    if (a.LIKE && !b.LIKE)
    {
        return -1;
    }
    else if (!a.LIKE && b.LIKE)
    {
        return 1;
    }

    return a.ID.ToString().CompareTo(b.ID.ToString());
});

대리자

heros.Sort(delegate (Hero a, Hero b) {
	if (a.LIKE && !b.LIKE)
    {
        return -1;
    }
    else if (!a.LIKE && b.LIKE)
    {
        return 1;
    }

    return a.ID.ToString().CompareTo(b.ID.ToString());
});

출력

0 - id : 2 / name : Spider Man / like : True
1 - id : 3 / name : Hawk Eye / like : True
2 - id : 5 / name : Ant Man / like : True
3 - id : 1 / name : Iron Man / like : False
4 - id : 4 / name : Doctor Strange / like : False
5 - id : 6 / name : Black Widow / like : False

전체 코드

using System;
using System.Collections;
using System.Collections.Generic;

namespace algorithm_cs
{
    public class Marvel
    {   
        struct Hero
        {
            int id;
            public int ID => id;
            string name;
            public string NAME => name;
            bool like;
            public bool LIKE => like;

            public Hero (int i, string s, bool b) 
            {
                id = i;
                name = s;
                like = b;
            }
        }


        List<Hero> heros = null;
        
        public Marvel() 
        {
            heros = new List<Hero>();
        }
        
        ~Marvel()
        {
            heros = null;
        }


        public void Init()
        {
            heros.Add(new Hero(1, "Iron Man", false));
            heros.Add(new Hero(2, "Spider Man", true));
            heros.Add(new Hero(3, "Hawk Eye", true));
            heros.Add(new Hero(4, "Doctor Strange", false));
            heros.Add(new Hero(5, "Ant Man", true));
            heros.Add(new Hero(6, "Black Widow", false));
        }

        public void SortHeros()
        {
            heros.Sort((Hero a, Hero b) => {
                if (a.LIKE && !b.LIKE)
                {
                    return -1;
                }
                else if (!a.LIKE && b.LIKE)
                {
                    return 1;
                }

                return a.ID.ToString().CompareTo(b.ID.ToString());
            });
        }

        public void PrintResult()
        {
            for (int i = 0 ; i < heros.Count; ++i)
            {
                Console.WriteLine(i + " - id : " + heros[i].ID + " / name : " + heros[i].NAME + " / like : " + heros[i].LIKE);
            }
        }
    }
    

    public class Execute
    {
        static void Main(string[] args)
        {
            Marvel marvel = new Marvel();
            marvel.Init();
            marvel.SortHeros();
            marvel.PrintResult();
        }
    }
}

0개의 댓글