[C#] Compare 함수의 결과


Development note/C#  2019. 6. 24. 09:00

안녕하세요. 명월입니다.

 

이 글은 C#에서 Compare 함수의 결과에 대한 글입니다.

 

우리가 프로그램을 작성하면 Equals 함수를 참 많이 사용하는데 의외로 Compare 함수는 잘 사용하지 않습니다.

Equals 함수는 단지 데이터가 서로 일치하면 true, 일치하지 않으면 false를 결과가 나와서 좀 더 사용하기 편합니다.

Compare 함수는 물론 그 값이 일치하면 0을 보내 는데 일치하지 않으면 1,-1의 결과가 나옵니다. 여기서 1과 -1의 차이를 정확하게 알아보고자 합니다. 예상으로는 비교 값의 어느 쪽이 크다는 뜻이기는 하는데 항상 헷갈려서 아예 정리를 할까 합니다.

class Program
{
  static void Main(string[] args)
  {
    // 결과값은 0입니다. 역시 비교값이 같으면 결과는 0입니다.
    Console.WriteLine((1).CompareTo(1));
 
    // 대상값이 1이고 비교할 값이 2일 경우 결과는 -1입니다. 즉, 대상 값이 작을 경우는 -1이네요.
    Console.WriteLine((1).CompareTo(2));
 
    // 대상값이 2이고 비교할 값이 1일 경우 결과는 1입니다. 즉, 대상 값이 클 경우는 1이네요.
    Console.WriteLine((2).CompareTo(1));
 
    // t1이 전 날, t2가 현재 일 경우는 -1 입니다. 즉, t1이 t2 보다 과거이면 -1입니다. Tick으로 치면 t1이 데이터가 작습니다.
    Console.WriteLine(DateTime.Compare(DateTime.Now.AddDays(-1), DateTime.Now));
    // t1이 현재, t2가 다음 날 일 경우는 1 입니다. 즉, t1이 t2 보다 미래면 1입니다. Tick으로 치면 t1이 데이터가 큽니다.
    Console.WriteLine(DateTime.Compare(DateTime.Now, DateTime.Now.AddDays(-1)));
 
    // t1.CompareTo(t2) 는 Compare(t1, t2) 와 같습니다.
    Console.WriteLine(DateTime.Now.CompareTo(DateTime.Now.AddDays(1)));
    // t1.CompareTo(t2) 는 Compare(t1, t2) 와 같습니다.
    Console.WriteLine(DateTime.Now.CompareTo(DateTime.Now.AddDays(-1)));
 
 
    Console.WriteLine("Press any key...");
    Console.ReadKey();
  }
}

전체적으로 보면 앞의 값이 작으면 -1, 크면 1이네요.

 

이게 별거 아닌 것 같은데, 항상 소트 식을 만들거나 비교 알고리즘을 만들 때 헷갈려서 콘솔 프로그램 만들어서 확인하곤 합니다. 아예 앞의 값이 작으면 -1, 크면 1로 외워야겠네요.

 

여기까지 C#의 Compare 함수의 결과에 대한 설명이었습니다.

 

궁금한 점이나 잘못된 점이 있으면 댓글 부탁드립니다.