Необходимо объяснить аппаратное продвижение для этого определения:
база данных Small: рабочий набор вписывается в физическую RAM единственного товарного сервера (приблизительно 16 ГБ теперь)
база данных Medium: вписывается в сингл или несколько (через RAID) товарные жесткие диски на единственной машине (до нескольких TBs теперь)
база данных Large: Данным нужно к распределенному через несколько товарных серверов для установки (до нескольких PBS теперь.)
use sort_by
array.sort_by {| e | e.something}
или
sort_lambda = lambda{|e| e.something}
array.sort_by(&sort_lambda)
С последним вы можете повторно использовать sort_lambda в других операторах sort_by
В Rails, или, скорее, с ActiveSupport, или в Ruby 1.9 (возможно, 1.8.7, не уверен) вы можете использовать новый сокращенный вариант:
array.sort_by(&:something)
Обратите внимание, что sort_by
имеет, возможно, дорогие (и, возможно, полезные: это зависит от сложности ключа сортировки) побочные эффекты: он генерирует и сохраняет временную пару ключ-значение для каждого элемента, чтобы его можно было сортировать по вашему новому ключу. Подробнее см. Обсуждение в документации .
Рассматривали ли вы включение Comparable в класс для a и b и просто вызов sort?
+1 к обоим предложениям Эймантаса, но я часто сталкиваюсь с этим в тех случаях, когда у меня есть собственный класс, который всегда сортирует таким образом, например альбомы, которые должны сортировать без учета регистра, игнорируя начальную пунктуацию и / a / an. Для этого более эффективно вычислить значение сортировки один раз, а затем соответственно переопределить <=>. Например:
class Album
def sort_value
@sv ||= @name.downcase.sub(/^\W*(the|an|a) /,"")
end
def <=>(other)
sort_value <=> (other.sort_value rescue other)
end
end