2009-03-11 7 views
3

노래 데이터가 들어있는 구조체가 있습니다.구조체 배열을 정렬하려면 어떻게해야합니까?

public struct uLib 
    { 
     public string Path; 
     public string Artist; 
     public string Title; 
     public string Album; 
     public string Length; 
    } 

내 라이브러리는이 uLib 배열로 구성됩니다. 아티스트에 의해이 어레이를 어떻게 분류 할 수 있을까요? 이 유형의 배열에서 호출 할 수있는 네이티브 정렬 함수가 있습니까? 아니면 "자체적으로 롤"해야합니까?

답변

16

우선 구조체가되어서는 안됩니다. 16 바이트보다 크기 때문에 구조체를 사용하면 성능상의 이점을 얻지 못합니다. 또한, 단일 값을 나타내지 않으므로 구조화하기 위해 의미 상 의미가 없습니다. 그냥 수업으로 만들어주세요.

Array.Sort(theArray, (x,y) => string.Compare(x.Artist,y.Artist)); 

당신이 C# 3 대신 람다 식의 대리자 사용하지 않은 경우 :

Array.Sort(theArray, delegate(uLib x, uLib y) { return string.Compare(x.Artist,y.Artist) }); 

편집을

Array 클래스는 사용할 수있는 Sort 방법이 있습니다 :
다음은 데이터가 클래스의 모습을 보여줍니다.

public class ULib { 

    private string _path, _artist, _title, _album, _length; 

    public string Path { get { return _path; } set { _path = value; } } 
    public string Artist { get { return _artist; } set { _artist = value; } } 
    public string Title { get { return _title; } set { _title = value; } } 
    public string Album { get { return _album; } set { _album = value; } } 
    public string Length { get { return _length; } set { _length = value; } } 

    public ULib() {} 

    public ULib(string path, string artist, string title, string album, string length) { 
     Path = path; 
     Artist = artist; 
     Title = title; 
     Album = album; 
     Length = length; 
    } 

} 

C#에는 속성에 대한 간단한 형식이 있습니다.

public string Path { get; set; } 
+0

공용 클래스 ULib도 –

+0

잘 작동합니다. 감사. 구조체를 사용해서는 안된다고 말하면 어떻게 이런 종류의 데이터를 구성하겠습니까? – Krakerjak

+0

클래스에 넣고 공용 필드 대신 속성을 사용하십시오. –

1

u에서 ULibArray 순서로 선택하십시오 .Artist select u;

0

uLibsIEnumerable<T>되는 가정이 시도 할 수 있습니다 :이 키를 사용하여 uLib 인스턴스를 정렬

uLibs.OrderBy(i => i.Artist) 

; 이 경우 비교 대상 키로 아티스트를 선택했습니다. 다른 필드에 대해서도 비슷한 정렬이 가능합니다.

+0

당신은하지만, 그 결과를 잃게됩니다. 올바른 방법은 입니다. var orderedLibs = uLibs.OrderBy (i => i.Artist) – erikkallen

+0

예, 이것은 다른 문장의 일부로 포함될 예정입니다. 결과로하는 일은 물론 당신에게 달린 것입니다. –

0

가 귀하의 질문에 대답하지 Sort array of items using OrderBy<> 합니까 대신 개인 변수와 세터 및 액세스 할 수 게터에 대한 코드를 작성하는,이 자동으로 생성? 이 작업을 수행 할 경우

감사 프리드리히는

관련 문제