Когда у вас есть массив, скажем, целых чисел для сортировки, довольно просто для метода sort
упорядочить элементы правильно - меньшие числа сначала, больше в конце. Это когда вы используете обычный sort
, без блока.
Но когда вы сортируете другие объекты, может потребоваться предоставить возможность сравнить (каждый) два из них. Допустим, у вас есть массив объектов класса Person
. Вероятно, вы не можете определить, больше ли объект bob
больше, чем объект mike
(т. Е. Класс Person
не имеет метода <=>
). В этом случае вам нужно будет предоставить некоторый код, чтобы объяснить, в каком порядке вы хотите, чтобы эти объекты отсортировались по методу sort
. Вот где блочная форма срабатывает.
people.sort{|p1,p2| p1.age <=> p2.age}
people.sort{|p1,p2| p1.children.count <=> p2.children.count}
и т. Д. Во всех этих случаях метод sort
сортирует их одинаково - используется один и тот же алгоритм. Другое дело - логика сравнения.