Назад к вопросам
Junior
107
questionbank

Что такое метод сортировки (sort) в Ruby?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

sort в Ruby - это метод, используемый для упорядочивания элементов в коллекции (например, массива или диапазона). Он возвращает новый объект, содержащий те же элементы, но в отсортированном порядке, оставляя исходную коллекцию без изменений.

Сортировка по умолчанию выполняется в возрастающем порядке, используя оператор сравнения <=>.

Можно предоставить блок кода для определения пользовательской логики сортировки. Блок принимает два элемента из коллекции и должен возвращать:

  • -1 или отрицательное число, если первый элемент должен быть раньше второго.
  • 0, если элементы считаются равными.
  • 1 или положительное число, если первый элемент должен быть позже второго.

Примеры использования:

# Сортировка массива чисел по умолчанию (возрастающий порядок)
numbers = [3, 1, 4, 1, 5, 9, 2, 6]
sorted_numbers = numbers.sort # => [1, 1, 2, 3, 4, 5, 6, 9]
# Сортировка массива строк по умолчанию (алфавитный порядок)
fruits = ["banana", "apple", "cherry"]
sorted_fruits = fruits.sort # => ["apple", "banana", "cherry"]
# Сортировка в убывающем порядке (с использованием блока)
numbers = [3, 1, 4, 1, 5, 9, 2, 6]
sorted_desc = numbers.sort { |a, b| b <=> a } # => [9, 6, 5, 4, 3, 2, 1, 1]
# Сортировка массива хешей по значению ключа (с использованием блока)
people = [{name: "Alice", age: 30}, {name: "Bob", age: 25}, {name: "Charlie", age: 35}]
sorted_by_age = people.sort { |a, b| a[:age] <=> b[:age] }
# => [{:name=>"Bob", :age=>25}, {:name=>"Alice", :age=>30}, {:name=>"Charlie", :age=>35}]

Существует также мутирующий аналог sort! и sort_by / sort_by! для более эффективной сортировки по ключу. sort_by вычисляет ключ для каждого элемента один раз перед сортировкой.