Код Шона в порядке, но я предпочитаю, чтобы он был написан таким образом, что более показательно и немного более эффективно:
people sort: [ :a :b |
a age < b age
or: [a age = b age and: [ a name < b name ] ]
Идея состоит в том, что блок сортировки должен отвечать true, если элемент a
сортируется до item b
. С учетом двух ключей, элемент сортируется перед другим элементом, если или его первичный ключ (age
) меньше, или первичный ключ такой же, и вторичный ключ (name
) меньше.
Это переводит непосредственно в приведенный выше код и может быть легко расширен до третьего или более критериев сортировки (например, либо вторичный ключ меньше, либо он такой же, а третичный ключ меньше).