Сортировка по свойствам элементов массива в ruby - PullRequest
7 голосов
/ 20 февраля 2011

У меня есть массив объектов, созданный из пользовательского класса.У пользовательского класса есть некоторые атрибуты, и я хочу отсортировать массив по одному из этих атрибутов?Есть ли простой способ реализовать это на Ruby, или я должен кодировать его с нуля?

Пример:

class Example
  attr_accessor :id, :number

  def initialize(iid,no)
    @id = iid
    @number = no
  end
end

exarray = []
1000.times do |n|
  exarray[n] = Example.new(n,n+5)
end

Здесь я хочу отсортировать exarray по его атрибуту number elements.

Ответы [ 3 ]

15 голосов
/ 20 февраля 2011

sort_by , вероятно, самый короткий вариант

exarray.sort_by {|x| x.number}

Это также работает

exarray.sort_by &:number
2 голосов
/ 20 февраля 2011

Если вы хотите инкапсулировать эту логику внутри класса, внедрите метод <=> в своем классе, вы можете сказать Ruby, как сравнивать объекты этого типа.Вот базовый пример:

class Example
  include Comparable  # optional, but might as well
  def <=>(other)
    this.number <=> other.number
  end
end

Теперь вы можете позвонить exarray.sort, и он будет "просто работать".


Дополнительная информация:

0 голосов
/ 20 февраля 2011

Попробуйте:

exarray.sort { |a, b| a.number <=> b.number }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...