어떤 형식을 List로 만들어서 관리할때 sort를 해야 할 경우도 생깁니다. (당연..;;;)

List의 Sort는 기본적으로 4개의 오버로드가 존재합니다.
1. List.Sort()
2. List.Sort(제네릭 Comparison)
3. List.Sort(제네릭 IComparer)
4. List.Sort(Int32, Int32, 제네릭 IComparer)

아무런 파라미터를 받지 않는 기본 Sort도 있고
특정 파라미터를 받는 Sort도 있는데
그 사용법을 간단히 정리해 보면

일단 리스트가 있어야 하니..
List myList = new List();
myList.Add("Daum");
myList.Add("Google");
myList.Add("Bing");
myList.Add("Naver");

이런 리스트가 있다고 할때
2번의 Sort를 쓰려면

public int compare(string x, string y)
{
return x.CompareTo(y);
}

요런 메서드를 하나 만들어서 (물론 구현내용은 자유롭겠져. 반환값만 -1,0,1 이면 뭐)

myList.Sort(compare);

이렇게 써주면 됩니다.

3번 Sort를 쓰려면
IComparer 을 구현한 클래스를 만들어야 합니다.

public class StringCompare : IComparer
{
public int Compare(string x, string y)
{
return x.CompareTo(y);
}
}

요런 클래스를 만든 후에

StringCompare sc = new StringCompare();
myList.Sort(sc);

요렇게 쓰면 되져. 
 4번 방법이야 sort할 index를 정해주는거니 별 차이 없구여

근데 sort를 무명메서드를 이용해서 코드를 만들수도 있습니다.
무명메서드는 delegate로 해도 되고 람다식을 써도 됩니다.

delegate를 쓰면
myList.Sort(delegate(string x, string y)
{
return x.CompareTo(y);
});

람다식을 쓰면
myList.Sort((string x, string y) => x.CompareTo(y));

이렇게 쓰면 됩니다.
취향따라 쓰면 되겠네요.

참고로 MSDN을 보면
Sort의 정렬방식에 대해 이렇게 써 있어요

 

이 메서드는 QuickSort 알고리즘을 사용하는 System.Array.Sort를 사용합니다. 이 구현에서는 불안정한 정렬을 수행합니다. 즉, 두 개의 같은 요소가 있을 경우 이들 요소의 순서가 유지되지 않을 수 있습니다. 이와 반대로 안정된 정렬은 동일한 요소의 순서를 그대로 유지합니다.

평균적으로 이 메서드는 O(n log n) 연산이며, 여기서 nCount입니다. 최악의 경우 이 메서드는 O(n ^ 2) 연산입니다.

by 피요히코~ 2010. 12. 10. 17:07

Array형식이나 List형식의 데이터는 index를 이용해 해당 데이터에 접근할수 있어요
뭐 예를들자면
List listStr = new List();
listStr.Add("1");
listStr.Add("2");

MessageBox.Show(listStr[1]);

뭐 이런식으로 하면
list의 두번째 데이터인 "2"가 출력되죠.

코딩을 하다보면
내가 원하는 데이터를 따로 담아두기 위해 클래스를 만들기도 합니다.(구조체든지.)

그 클래스에서는 프로퍼티 등을 통해 외부에서 엑세스 할수 있도록 해주죠.

하지만 외부에서 엑세스 하는 변수가 (예를들어) List<T> 형식인 경우

물론 외부에서 그 변수를 그대로 얻어와서
핸들링 할수도 있겠지만.
클래스 자체에서의 작업을 통해
index를 통해 접근 할수도 있습니다.

public 형식 this[int index]
{
     get
    {
        return List[index];
    }
}

뭐 이런식으로 해주면 됩니다.
클래스 외부에서 접근을 해야 하니 당연히 public이겠구요
형식은 뭐. 해당 list의 형식과 맞춰주면 되겠죠.

그리고 이왕이면
Add/Insert/Remove/IndexOf 등의 메서드도 구현해놓는다면
사용할때 더 편리하겠죠?
by 피요히코~ 2010. 4. 26. 14:37
| 1 |