這是你的一個難題。隨機洗牌相同元素的排序比較方法
我想改變下面的比較方法,以便當兩個項目被認爲是相等的時候,它們將被隨機洗牌。
myList.Sort((x, y) => x.Score.CompareTo(y.Score));
我可以想像,如果你不想在另一個優先考慮一個結果時,他們的成績是相同的這種情況將在訂貨搜索結果時是有用的。
任何人都想給它一個去嗎?
這是我第一次嘗試解決方案,但它不起作用。我會讓你找出原因。
class RandomizeWhenEqualComparer<T> : IComparer<T>
{
private readonly Func<T, T, int> _comparer;
public int Compare(T x, T y)
{
if (x.Equals(y)) return 0;
int result = _comparer(x, y);
if (result != 0) return result;
double random = StaticRandom.NextDouble();
return (random < .5) ? -1 : 1;
}
public RandomizeWhenEqualComparer(Func<T, T, int> comparer)
{
_comparer = comparer;
}
}
閱讀此:http://blogs.msdn.com/oldnewthing/archive/2009/05/08/9595334.aspx(和從那裏鏈接的帖子),找出你爲什麼建議做一個壞的理念。 – AakashM 2009-06-23 07:33:21
如果比較器正確實現並且在爲同一對元素再次調用時返回相同結果,則這不會成爲問題。 – sharptooth 2009-06-23 08:05:57