Разврставање је од раних рана била заокупљена за рачунарске научнике. Било је много алгоритми који су ушли и испали из употребе и данас нови алгоритми померају границе перформанси. Будући да је језик високог нивоа, нећете имплементирати алгоритме сортирања у Руби ако вам је стало до перформанси и поред тога, сортирања Арраис и друге колекције су још ствари које Руби чини за вас.
Технички гледано, сортирање је посао којим управља модул Енумерабле. Модул Енумерабле оно је што повезује све врсте колекција у Руби-у заједно. Рукује итерирањем колекција, сортирањем, прегледањем и проналажењем одређених елемената итд. Колико многобројна врста колекције помало представља мистерију, или би барем требала остати таква. Стварни алгоритам сортирања није битан, једино што требате знати је да се објекти у колекцији упоређују помоћу „оператера свемирског брода“.
"Оператор свемирског брода" узима два објекта, упоређује их и затим враћа -1, 0 или 1. То је помало нејасно, али сам оператер нема баш дефинисано понашање. Узмимо за пример Нумеричке објекте. Ако имате два нумеричка објекта
а и би проценити а <=> б, шта ће израз оценити? У случају Нумерике то је лако рећи. Ако је а већи од б, то ће бити -1, ако су једнаки, то ће бити 0, а ако је б већи од а, то ће бити 1. Ово се користи да се каже алгоритам сортирања који од два објекта треба прво да крене у низ. Сјетите се само да ако ће лијеви операнд доћи први у низу, требао би процијенити на -1, ако десна рука прво мора бити 1, а ако није важно то би требао бити 0.Не прати увек таква уредна правила. Шта се догађа ако овај оператор користите на два објекта различитих врста? Вероватно ћете добити изузетак. Шта се догоди кад назовете 1 <=> 'мајмун'? Ово ће бити еквивалент позиву 1. <=> ('мајмун'), што значи да се стварна метода позива на лево операнд и Фикнум # <=> враћа нулу ако десни операнд није нумерички. Ако оператор врати нулу, метода сортирања ће изузети изузетак. Прије сортирања низова провјерите да ли садрже предмете који се могу сортирати.
Друго, није дефинисано стварно понашање оператора свемирског брода. Дефинисана је само за неке основне класе, а за ваше прилагођене часове потпуно је на вама шта желите да значе. Ако имате Ученик класе можете да имате сортирање ученика по презимену, имену, степену оцене или њиховој комбинацији. Тако да увек будите свесни да понашање оператора свемирског брода и сортирање није добро дефинисано за ништа осим за основне типове.
Имате низ нумеричких објеката и желите да их сортирате. Постоје два основна метода за то: врста и врста!. Прво ствара копију матрице, сортира је и враћа. Друга сортира низ на месту.
То је прилично саморазумљиво. Дакле, узмимо зарез. Шта ако се не желите ослонити на оператора свемирског брода? Шта ако желите потпуно другачије понашање? Ове две методе сортирања узимају опционални блок параметар. Тај блок узима два параметра и треба да даје вредности баш као што то ради оператор свемирског брода: -1, 0 и 1. Дакле, с обзиром на низ, желимо да га сортирамо тако да све вредности које су дељиве са 3 долазе прво, а све остале следе. Стварни поредак овде није важан, само што они који су подељени са 3 долазе први.
Како ово ради? Прво, узмите у обзир аргумент блока методом сортирања. Друго, имајте на уму поделе модула који су извршени на блоковским параметрима и поновну употребу оператора свемирског брода. Ако је један више од 3, модул ће бити 0, иначе ће бити 1 или 2. Пошто ће 0 сортирати пре 1 или 2, овде је битан само модул. Употреба параметра блока је посебно корисна у низовима који имају више врста елемената или када желите сортирати на прилагођене класе које немају дефинираног оператора свемирског брода.
Постоји још једна метода сортирања, која се зове Сортирај по. Међутим, прво требате разумети превођење низова и колекција са мапом пре него што се бавите сорт_би.