按对象列表排序对象列表

时间:2014-07-02 18:38:58

标签: list sorting object

我有一个“人物”对象列表。 Person对象包含以下属性...

Public Class Person
     Public Property Name As String
     Public Property Age As Integer
     Public Property ValueList as List(of Integer)
End Class

列表中的每个Person对象在其ValueList属性中始终具有相同数量的Integers。这个数字需要能够改变。所以有一次他们所有人都会在列表中有3个整数,而在另一个时候他们都会有2个整数。

我的问题是,我如何首先按“Age”属性排序对象,然后按ValueList中的第一个Integer,然后是ValueList中的下一个Integer,依此类推?

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

你可以认为这只是一个正常的排序问题,你可以看到排序名称。排序时,您必须比较值。当按字母顺序对名称进行排序时,将比较第一个字母(这可以被认为是年龄),然后是第二个,第三个,第四个字母(ValueList),直到这些值彼此不相等。我认为对人员列表进行排序的最简洁方法是编写排序算法,当需要比较两个人时,将它们传递给比较方法,该方法将返回零,负数或基于哪个人的正数是"更大"。

我为下面的插入排序(来自http://en.wikipedia.org/wiki/Insertion_sort)放下了一些伪代码。什么是大胆的具体到你的情况。

for i ← 1 to length(A)
    x ← A[i]
    j ← i
    while j > 0 and **fooCompareMethod(A[j-1], x) > 0**
        A[j] ← A[j-1]
        j ← j - 1
    A[j] ← x

//Returns positive if person1 is "greater than" person2
//return negative if person1 is "less than" person2
//returns zero if person1 and person2 are "equal"
**int fooCompareMethod(person1, person2) 
    if person1 Age > person2 Age
        return 1
    else if person1 Age < person2 Age
        return -1
    else
        for k ← 1 to length(person1 ValueList) //assuming both valueLists are same length
            y ← person1 ValueList(k)
            z ← person2 ValueList(k)
            if y > z
                return 1
            else if y < z
                return -1
    return 0**