[英]How to implement multiple CompareTo methods?
我有一個自定義的通用數組/容器,它有一個排序方法:
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;
}
}
項目是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;
}
播放器類具有3個屬性:名稱,姓氏和分數。 這可以按名稱和姓氏對元素進行排序,效果很好,但是現在我需要另一個容器,該容器應按分數排序(第三個屬性)。 如何在不使用List和內置OrderBy,Sort方法的情況下實現兩種不同的比較方法 ?
是否可以通過某種方式將類屬性傳遞給Sort方法?
Container<Player> sortedByName = playerList.Sort(Name, LastName);
Container<Player> sortedByScore = playerList.Sort(Score);
您應該實現IComparer<T>
。 然后,您可以更改您的排序方法以接受它:
public class PlayerNameComparer : IComparer<Player>
{
public int Compare(Player x, Player y)
{
if (x.Name.CompareTo(y.Name) < 0)
return -1;
else if (x.Name.CompareTo(y.Name) == 0)
return x.LastName.CompareTo(y.LastName);
else
return 1;
}
}
以及修改后的Sort方法:
public void Sort(IComparer<Player> comparer)
{
for (int i = 0; i < Count; i++)
{
int min = i;
for (int j = i + 1; j < Count; j++)
if (comparer.Compare(Items[j], Items[min]) < 0)
min = j;
if (min == i) continue;
T temp = Items[i];
Items[i] = Items[min];
Items[min] = temp;
}
}
用法示例:
collection.Sort(new PlayerNameComparer());
collection.Sort(new ScoreComparer());
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.