본문 바로가기
C#

[C#] IComparable과 IComparer

by 소리쿤 2023. 3. 26.
	public class Number : IComparable<Number>
	{
		public int value = 0;

		public Number(int num)
		{
			this.value = num;
		}

		public int CompareTo(Number? other)
		{
			if (this.value > other.value)
			{
				return 1;
			}
			else if (this.value < other.value)
			{
				return -1;
			}
			else
			{
				return 0;
			}
		}
	}

	public class ReverseComparer : IComparer<Number>
	{
		public int Compare(Number? x, Number? y)
		{
			if (x.value > y.value)
			{
				return -1;
			}
			else if (x.value < y.value)
			{
				return 1;
			}
			else
			{
				return 0;
			}
		}
	}


	class Program
	{
		static List<Number> list = new List<Number>();

		static void Main(string[] args)
		{
			for(int i = 0; i < 10; i++)
			{
				list.Add(new Number(i));
			}

			list.Sort();

			list.ForEach(num => Console.WriteLine(num.value));

			list.Sort(new ReverseComparer());

			list.ForEach(num => Console.WriteLine(num.value));
		}
	}

설명할 건 따로 없음...

위 용법대로 쓰면 됨...

 

-1, 0, 1 리턴값이 좀 헷갈림

 

X < Y 인 경우에, -1이면 오름차순, 1이면 내림차순이다.

'C#' 카테고리의 다른 글

[C#] 공변성, 반공변성  (0) 2023.04.04
[C#] SpinLock 구현  (0) 2023.03.29
[C#] Dispose 패턴  (0) 2023.03.23
[C#] Interlocked  (0) 2023.03.20
[C#] 메모리 베리어 예제  (0) 2023.03.06