0

これは十分に単純なようですが、私はこれの精神的なブロックから抜け出すのに苦労しています。

名前のリストがあり、アイテムはいくつかのビジネスルールに基づいて特別に注文されています。これは、特定の状況に対して正しいと見なされる順序です。

それで

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

上記の値のいずれかを持つフィールドNameを含むPersonタイプがあります。

それで、

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クラスの定義方法により、これを変更することはできません。残念ながら、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.

誰?ちなみに、おそらくお分かりのように、これは問題の「架空の」表現であり、残念ながら、実際の製品コードをここに投稿したり、説明したりすることはできません。他の誰かが以前に似たようなものに遭遇したことを願っています。

4

1 に答える 1

1

など"Bob" < "Jim" < "Kat"など。

人名にはそれぞれ階級があります。名前のリストが少ない場合は、Dictonary Rankそのようなものを作成しますRank["Bob"] < Rank["Jim"]

IComparer次に、このデータを使用する を作成します。これは、Map実際には比較自体にある可能性があります。Array.Sort Method (Array, IComparer)この比較子を使用して人物を並べ替えるために使用します。

于 2013-01-24T01:00:25.990 に答える