Самый простой код для сортировки массивов в рубине?

Необходимо объяснить аппаратное продвижение для этого определения:

  1. база данных Small: рабочий набор вписывается в физическую RAM единственного товарного сервера (приблизительно 16 ГБ теперь)

  2. база данных Medium: вписывается в сингл или несколько (через RAID) товарные жесткие диски на единственной машине (до нескольких TBs теперь)

  3. база данных Large: Данным нужно к распределенному через несколько товарных серверов для установки (до нескольких PBS теперь.)

6
задан Kostas 16 September 2009 в 14:37
поделиться

4 ответа

use sort_by

array.sort_by {| e | e.something}

или

sort_lambda = lambda{|e| e.something}
array.sort_by(&sort_lambda)

С последним вы можете повторно использовать sort_lambda в других операторах sort_by

20
ответ дан 8 December 2019 в 03:09
поделиться

В Rails, или, скорее, с ActiveSupport, или в Ruby 1.9 (возможно, 1.8.7, не уверен) вы можете использовать новый сокращенный вариант:

array.sort_by(&:something)

Обратите внимание, что sort_by имеет, возможно, дорогие (и, возможно, полезные: это зависит от сложности ключа сортировки) побочные эффекты: он генерирует и сохраняет временную пару ключ-значение для каждого элемента, чтобы его можно было сортировать по вашему новому ключу. Подробнее см. Обсуждение в документации .

5
ответ дан 8 December 2019 в 03:09
поделиться

Рассматривали ли вы включение Comparable в класс для a и b и просто вызов sort?

0
ответ дан 8 December 2019 в 03:09
поделиться

+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
5
ответ дан 8 December 2019 в 03:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: