【发布时间】:2018-12-07 09:30:24
【问题描述】:
我有一个自定义的通用数组/容器,它有一个排序方法:
public void Sort()
{
for (int i = 0; i < Count; i++)
{
int min = i;
for (int j = i + 1; j < Count; j++)
if (Items[j].CompareTo(Items[min]) < 0)
min = j;
if (min == i) continue;
T temp = Items[i];
Items[i] = Items[min];
Items[min] = temp;
}
}
Items 是一个 T 对象的数组。 T 实现了 IComparable 并有一个 CompareTo 方法:
public int CompareTo(object obj)
{
if (!(obj is Player))
return -1;
Player player = (Player)obj;
if (Name.CompareTo(player.Name) < 0)
return -1;
else if (Name.CompareTo(player.Name) == 0)
return LastName.CompareTo(player.LastName);
else
return 1;
}
Player 类有 3 个属性:Name、LastName 和 Score。 这可以很好地按名称和姓氏对元素进行排序,但现在我需要另一个应该按分数排序的容器(第三个属性)。 如何实现两种不同的比较方法不使用 List 和内置的 OrderBy、Sort 方法?
是否可以以某种方式将类属性传递给 Sort 方法?
Container<Player> sortedByName = playerList.Sort(Name, LastName);
Container<Player> sortedByScore = playerList.Sort(Score);
【问题讨论】: