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