c# - 如何实现多个 CompareTo 方法?
问题描述
我有一个自定义的通用数组/容器,它有一个排序方法:
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);
解决方案
推荐阅读
- swift - Swift 从函数返回不同的类型
- db2 - 为什么不在 IBM Data Client 中运行包?为什么这个软件看不到功能和程序?
- reactjs - Reactjs,this.context 已弃用
- go - 在结构定义之外有方法的原因是什么?
- javascript - 如何使用鼠标中轮按钮拖动 Openseadragon 画布
- excel - 在每个 IF 语句中的真值或假值的 excel 中嵌套 IF 时遇到问题
- amazon-web-services - 如何使用 aws cloudwatch get-metric-widget-image?
- ios - 在 WebView ios 中下载图像
- python - 在表中插入总行数,不使用 Pandas,但仅使用循环
- django - 基于类的视图中的 django 授权