Вот вам загадка.
Я хочу изменить следующий метод сравнения, чтобы, когда два элемента считались равными, они перемешивались случайным образом.
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;
}
}