Некоторые китайские символы не могут быть интерпретированы при вызове REST

В вашем примере

a.sort

эквивалентно

a.sort { |x, y| x <=> y }

Как вы знаете, для сортировки массива вам нужно иметь возможность сравнивать его элементы (если вы сомните, что просто попробуйте реализовать любой алгоритм сортировки без какого-либо сравнения, нет <, >, <= или >=).

Предоставляемый вами блок действительно является функцией, которая будет вызывается алгоритмом sort для сравнения двух элементов. Это x и y всегда будут некоторыми элементами входного массива, выбранными алгоритмом sort во время его выполнения.

Алгоритм sort будет считать, что эта функция сравнения / блок будет соответствуют требованиям метода <=>:

  • return -1, если x & lt; y
  • возвращает 0, если x = y
  • возвращает 1, если x> y

Неспособность обеспечить адекватную функцию сравнения / блок приведет к массив, порядок которого не определен.

Теперь вы должны понять, почему

a.sort { |x, y| x <=> y }

и

a.sort { |x, y| y <=> x }

возвращают тот же массив в противоположных порядках.


Чтобы узнать, что добавил Тейт Джонсон, если вы реализуете функцию сравнения <=> на любом из ваших классов, вы получаете следующее

  1. Вы можете включить модуль Comparable в вашем классе, который автоматически определит для вас следующие методы: between?, ==, >=, <, <= и >.
  2. Экземпляры вашего класса теперь можно сортировать, используя вызов по умолчанию (то есть без аргумента) в sort.

Обратите внимание, что метод <=> уже предоставляется везде, где это имеет смысл в стандартной библиотеке Ruby (Bignum ], Array, File::Stat, Fixnum, String, Time и т. д.).

0
задан FSammyson 3 March 2019 в 02:38
поделиться