这似乎很简单,但我很难摆脱这个心理障碍。
我有一个名单列表,这些项目是根据某些商业规则专门订购的。对于某些特定情况,这是被认为是正确的顺序。
所以
string [] original = {"Bob","Jim","Kat","Nat","Kim","Ant"};
我有一个包含字段名称的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.
任何?顺便说一句,正如你可能会说的那样,这是一个问题的“假设”表示,不幸的是,我不能在这里发布或讨论实际的生产代码。我希望其他人之前遇到过类似的事情。
答案 0 :(得分:1)
所以"Bob" < "Jim" < "Kat"
等。
每个人的名字都有一个等级。如果名称列表很小,请创建一个Dictonary Rank
,使Rank["Bob"] < Rank["Jim"]
等
现在创建一个使用此数据的IComparer
,Map
实际上可能在比较器中。使用Array.Sort Method (Array, IComparer)
对使用此比较器的人员进行排序。