2010-12-04 7 views
3

안녕 얘들 아. 내가 문제가있는 학교에 대한 과제가 있습니다. 할당은 사용자가 영화 목록을 추가, 수정 및 볼 수있는 콘솔 앱을 만드는 것입니다.구조체 내부에서 목록 정렬

struct Movie{ 
    public string title; 
    public string year; 
    public string director; 
    public float quality; 
    public string mpaaRating; 
    public string genre; 
    public List<string> cast; 
    public List<string> quotes; 
    public List<string> keywords; 
} 
struct MovieList{ 
    public int length; 
    public Movie[] movie; 
} 
... 
MovieList List = new MovieList() 

가 여기에 내가에 문제가있어 부분 : 각 영화는 나는 다음과 같은 구조체를 사용해야하는 등 제목, 연도, 이사, 같은 속성이 포함되어 있습니다. 영화 제목으로 List를 정렬해야합니다. 이 문제를 해결하는 올바른 방법을 알아내는 데 어려움을 겪고 있습니다. 누구든지 조언을하나요?

+0

무비 구조체 (단, 클래스)는 안된다. –

+1

첫째, 이들 유형 중 어느 것도 구조체 여야합니다. 둘째; List-of-T에 대해 알고 있기 때문에 왜 MovieList에 배열을 사용합니까? 사실, MovieList가있는 이유는 무엇입니까? –

+0

그 중 하나를 변경할 수 없습니다. 그것들은 과제의 요구 사항입니다. – Tyler

답변

2

우선 구조체가 아니어야하며 클래스 여야합니다. 구조체는 단일 값을 나타내는 유형을위한 것이며 클래스보다 올바르게 구현하는 것이 훨씬 더 복잡합니다.

이 같은 영화를 정렬 할 수 있습니다

List.movie = List.movie.OrderBy(m => m.title).ToArray(); 
+1

이것은 (이전 배열을 변경하지 않고) 정렬 된 항목 인 * second * 배열을 생성 한 다음 배열을 교체한다는 점에 유의해야합니다. –

0

당신은 배열 movie을 정렬 할 필요가있다. 따라서 Merge Sort과 같은 정렬 방법을 사용하십시오. 영화가 다른 영화보다 크거나 작은 경우에는 제목을 비교하여 결정하십시오.

movie[a].title.CompareTo(movie[b].title) 
+1

첫 번째 피연산자가'null' 인 경우'string.Compare (x, y)'를 사용하는 것이 일반적으로 더 안전합니다 –

2

는 (별도로 언급) 배열이므로 :

Array.Sort(List.movie, 
    (a,b)=>string.Compare(a.title,b.title));