基于字符串数组对对象集合进行排序

本文关键字:集合 排序 对象 字符串 数组 | 更新日期: 2023-09-27 17:55:26

这似乎很简单,但我很难摆脱这个问题的心理障碍。

我有一个名称列表,这些项目是根据某些业务规则专门排序的。对于某些给定情况,这是被认为是正确的顺序。

所以

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.

任何人?顺便说一句,正如您可能知道的那样,这是一个问题的"假设"代表,不幸的是,我无法在此处发布或讨论实际的生产代码。我希望其他人以前遇到过类似的事情。

基于字符串数组对对象集合进行排序

所以"Bob" < "Jim" < "Kat"等等。

每个人的名字都有一个等级。如果名称列表很小,请创建一个Dictonary Rank,以便Rank["Bob"] < Rank["Jim"]等。

现在创建一个使用此数据的IComparerMap实际上可以在比较器本身中。使用此比较器对Array.Sort Method (Array, IComparer)对人员进行排序。