2013-01-24 71 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"

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

现在创建一个使用此数据的IComparer,该Map实际上可能是在比较器本身。使用Array.Sort Method (Array, IComparer)来排序使用此比较器的人员。

相关问题