Я попытался перетасовать список байтов (List), используя любой код:
myList.Sort((a, b) => this._Rnd.Next(-1, 1));
или
myList.Sort(delegate(byte b1, byte b2)
{
return this._Rnd.Next(-1, 1);
});
, и они выдали следующую ошибку:
Не удалось выполнить сортировку, потому что метод IComparer.Compare () возвращает противоречивые результаты. Либо значение не сравнивается с самим собой, либо одно значение, многократно сравниваемое с другим значением, дает разные результаты. x: '{0}', тип x: '{1}', IComparer: '{2}'.
Что плохого в использовании случайной функции вместо функции сравнения байтов?
Я пробовал использовать LINQ функция вместо этого, и она работает.
var myNewList = myList.OrderBy(s => Guid.NewGuid());
var myNewList = myList.OrderBy(s => this._Rnd.NextDouble());
Я действительно читал, что эти методы медленнее, чем тасование Фишера – Йейтса, давая только время выполнения O (n). Но вот как раз интересно использовать функцию сортировки и случайный.