我有一个“人物”对象列表。 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,依此类推?
感谢您的帮助!
答案 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**