2013-01-24 3 views
0

이것은 충분히 간단하지만이 항목에서 정신 차단을 해제하는 데 어려움을 겪고 있습니다.문자열 배열을 기반으로 한 개체 모음 정렬

나는 이름 목록을 가지며 항목은 특정 비즈니스 규칙에 따라 구체적으로 정렬됩니다. 이것은 주어진 상황에 맞는 것으로 간주되는 순서입니다.

그래서

string [] original = {"Bob","Jim","Kat","Nat","Kim","Ant"}; 

나는 위의 값 중 하나를 가질 것이다 필드 이름을 포함하는 사람의 유형을 가지고있다.

그래서,

class Person { 
    ... 
    public string Name; //Name will be one of the above values. 
    ... 
} 

와 나는 컬렉션이 사람 개체의 무리를 가지고있다.

PersonCollection p = new PersonCollection 
        { new Person{ .. Name = "Kat"..}, 
         new Person {.. "Kim" ..} ... 
        } etc.; 

나는 이러한 모든 개체는 위의 목록에서 값을 포함하는 이름을 가지고 것을 알고, 심지어 중복이있을하지 않을 수 있습니다. 마스터 목록에 제공된 이름 (즉, 위의 "원본"배열)의 순서에 따라이 사람 모음을 정리해야합니다.

지금까지는 똑바로했지만 여기 까다로운 문제가 있습니다. 는 Person 클래스가 정의되는 방식 덕분에

, 내가 가서이 변경할 수 없습니다 불행하게도, 우리는 사람 만 객체 즉

이동 항목에 다음과 같은 가능한 방법이있다.

MoveToFirst(PersonCollection collection) // Move to the first of the given collection 
MoveToLast(PersonCollection collection) // Move to the last of the given collection 
MoveAfter(PersonCollection collection, Person previousPerson) //places the object after another person item, which is present in the list. 

누구나? 그런데 여러분이 아마 말할 수 있듯이, 이것은 문제의 "가상의"대표이며, 실제 생산 코드를 게시하거나 토론 할 수는 없습니다. 불행히도. 나는 다른 누군가가 전에 비슷한 것을 만나기를 바랍니다.

+0

다른 사람의 목록을 정렬하거나 MoveAfter 만 사용하여 컬렉션을 다시 정렬하는 데 문제가 있습니까? –

+0

당신은이 질문을 정리해야합니다. 나는 왜 당신이 두려워하는 것이지 회사 비밀을 포기하지 않고 더 합리적인 질문을 공식화 할 수 없다고 확신하지 않습니다. 나는이 혼란을보고 현기증을 느낍니다. – MethodMan

+0

문제는 첫 번째 배열에서 제공되는 항목의 순서에 따라 MoveAfter를 사용하여 컬렉션을 다시 구성하는 것입니다. –

답변

1

그래서 등 "Bob" < "Jim" < "Kat"

각 사람의 이름은 순위가 있습니다. 이름 목록이 작 으면, Rank["Bob"] < Rank["Jim"]

지금이 데이터를 사용하는 IComparer을 만들 Dictonary Rank하도록 만듭니다 Map 실제로 비교 자 자체에있을 수 있습니다. 이 비교자를 사용하여 사람을 분류하려면 Array.Sort Method (Array, IComparer)을 사용하십시오.

관련 문제