C# compareTo(), sort() 질문드립니다

C# compareTo(), sort() 질문드립니다

작성일 2024.02.12댓글 1건
    게시물 수정 , 삭제는 로그인 필요

1. CompareTo()메서드에서 Name의 경우 if비교구문에서 Breed가 같을 때
-Name.CompareTo(other.Name)을 호출하여 결국 다시 똑같은 CompareTo()메서드로 돌아가는 형태로 보이는데,,, name에 관한 비교문은 존재하지 않잖아요. 근데 이런 구조가 어떻게 name을 정렬할 수 있는지를 질문드립니다. 이 부분이 이해가 가지 않아요.
2. 메인메서드에서 dogs.Sort()를 하기만 하면 Dog클래스에서 정의한 CompareTo메서드대로 정렬을 해주잖아요. 이게 C#의 내부적으로 어떤 메커니즘에 의해서 sort메서드만 호출해도 compareTo메서드가 호출되어서 정렬되는지 궁금해요.
3. 또한 CompareTo메서드가 현재 코드 기준으로 Dog other을 매개변수로 받고 있는데 dogs.sort()에서 dogs인스턴스가 other로 들어가게 되는건지요? 그렇다면 Breed를 other.Breed와 비교하고 있는데 여기서 other.Breed말고 비교기준인 Breed는 무엇인지요...제 생각엔 dogs리스트의 Breed내용을 뜻하는 것 같은데...그러면 other.Breed가 아니라 Breed가 dogs를 매개변수로 받고 있는 것 같은데 그러면 매개변수로 정의된 Dog other은 무엇인지....이게 책에서는 compareTo메서드를 저렇게 정의하면 메인메서드에서 dogs.sort()했을 때 알아서 정렬된다라고만 나와있어서 코드를 현재 제가 짜기는 커녕 개념이 뒤죽박죽이라 코딩해석도 안되네요..답답해서 질문드립니다



#c# compareto #c# compareto 함수 #c# compareto multiple fields #c# compareto string #c# compareto datetime #c# compareto int #c# compareto return values #c# compareto bool #c# compareto object #c# compareto example

profile_image 익명 작성일 -

정렬(Sort)은 순서를 정하는 것입니다.

1, 2, 3, -7

a, b, z, f,

김, 나, 박, 이

위의 것들을 정렬하려면, 각 요소의 순서를 알아야 하는데, 우리는 그것을 이미 알고 있습니다.

숫자는 크기로 순서를 판별할 수 있고, 알파벳은 고유의 순서가 있기 때문이죠.

C# 의 기반 객체도 우리의 인식과 같도록 설계되어 있습니다.

숫자 객체는 크기, 문자(열) 객체는 알파벳의 순서를 기반해서 IComparable.CompareTo 값을 반환하도록 이미 정의되어 있습니다. 예를 들어, int 의 정의를 보면,

public readonly struct Int32 : IComparable, IConvertible, ISpanFormattable, IComparable<int>, IEquatable<int>, IBinaryInteger<int>, IMinMaxValue<int>, ISignedNumber<int>, IUtf8SpanFormattable, IBinaryIntegerParseAndFormatInfo<int> { // ...

IComparable<T>를 구현하고 있기 때문에, 아래와 같이 CompareTo를 호출할 수 있습니다.

int one = 0; int other = 1; var result = one.CompareTo(other);

string 의 경우도, 이와 비슷하게 정의되어 있습니다.

다만, 이 메서드는 프로그래머가 호출할 일은 거의 없고, 보통 List<T>.Sort 메서드나, ISortedList<T>.Add 메서드가 호출하게 됩니다.

=================================================

1. CompareTo()메서드에서 Name의 경우 if비교구문에서 Breed가 같을 때

-Name.CompareTo(other.Name)을 호출하여 결국 다시 똑같은 CompareTo()메서드로 돌아가는 형태로 보이는데

==================================================

Dog.CompareTo 가 반환할 값을 다른 객체에 의존하도록 설계한 것입니다.

코드 내용을 보니, 두 가지 기준으로 순서를 정하고 있는데, 첫째는 Dog.Bread 값으로 순서를 정하고, 순서가 같은 경우, Dog.Name 값으로 순서를 정합니다.

Breed 는 enum 이기에, 그 기반이 되는 정수 객체의 int.CompareTo, Name 은 string 이기에, string.CompareTo 메서드가 호출되는 것이죠.

이 경우, 같은 종에 같은 이름이면 이 둘은 순서가 같습니다.

============================

2. 메인메서드에서 dogs.Sort()를 하기만 하면 Dog클래스에서 정의한 CompareTo메서드대로 정렬을 해주잖아요

=======================================

=================================

3. 또한 CompareTo메서드가 현재 코드 기준으로 Dog other을 매개변수로 받고 있는데 dogs.sort()에서 dogs인스턴스가 other로 들어가게 되는건지요?

==================================

List<Dog>.Sort 메서드는 List 의 모든 요소(dogs)에 대해 Dog.CompareTo(Dog other)를 호출해서 순서를 비교하고 그 값을 바탕으로 정렬을 합니다. Sort 가 내부적으로 어떤 정렬 알고리즘을 선택하더라도, 반드시 CompareTo 를 통해 그 순서를 알아야 합니다.

참고로, 정렬 알고리즘 공부할 때, 보통 CompareTo 라는 개념을 고려하지 않는데, 그 이유는 비교 연산자를 CompareTo 처럼 쓰기 때문입니다. 이것이 가능한 이유는 비교 연산자의 행태가 CompareTo 의 행태와 딱 맞아 떨어지는 객체만 선정해서 예제를 구성했기 때문입니다.

C#에서는 값의 비교(IEquatable)와 순서의 비교(IComparable)를 구분하니 이 개념을 헷갈리지 않도록 주의해야 합니다.

즉, CompareTo가 0을 반환한 경우, 두 객체의 순서가 같다는 의미이지, 그 값이 같다는 의미는 아닙니다.

C# list sort 질문이요

... 배워보고 C#은 처음인데 Unity3d 때문에 쓰다가 list 쓰는 법이 달라서 질문 드립니다 어떻게 쓰면 되는지 예제 하나만 가르쳐주세요 인스턴스명.Sort...

java compareTo 질문 좀 받아주세요!!

... 굉장히 어이없는 질문 일 수도 있는데... 부탁 드립니다.. 처음 비교할 때 무엇과... Arrays.sort(scores); for(int i=0; i<scores.length; i++){ System....

자바 compareTo

... 관련하여 질문드립니다. 아래 소스 보시면... 마지막으로 compare(Object o1, Object o2)는 compareTo와... Arrays.sort(s); System.out.println(Arrays.toString(s)); } }...

C# CompareTo()메서드 질문드려요

사진의 밑줄 친 return -Name.CompareTo(other.Name)이 잘 이해가 가질 않아 질문드려요.... dog.sort()로 호출되었을 때 어떻게 compare메서드가 호출되어 동작하는 지 과정이...

자바 compare 메소드 질문입니다

... 다시 질문드립니다. 아까 답변 주신거 다시 답 주시면 채택해드리겠습니다.... 질문: 근데 Collections.sort() 를 사용할 때 compareTo가 이용되므로 compareTo 만 수정하면...

C# IComparer 질문!

c#을 한창 공부중인 사람입니다 c#책을 사다 공부중에 IComparer라는... 오는 sort에 사용한다면 public int Compare(string x, string y) { return y.Length.CompareTo(x.Length); } 위와...

C# 델리게이트 질문드립니다.

... to.String 반환받은걸 여기다 다 넣음 { this.things = things; } public void Sort(CompareDelegate compareMethod) // 6. 딜리게이트 인자를 받는다고 되어...

[급함!!] 자바 arraylist sort요~

안녕하세요~ ArrayList sort 질문입니다..... 고수님들 부탁드립니다(__) 음, 질문 내용이... int compare = name.compareTo(phone.getName()); if (compare...