Преобразование массива только с одним объектом в Ruby - PullRequest
1 голос
/ 09 сентября 2011

Скажем, у меня есть массив, и я использую методы keep_if или select, чтобы удалить все, кроме одного объекта для массива - есть ли способ вывести этот объект из массива, так что это не массив еще?

Например, при настройке моих моделей previous и current будут иметь только один объект.

 def more_or_less?(project, current_day)
    words = project.words
    current = words.select {|w| w.wrote_on == current_day}
    previous = words.select {|w| w.wrote_on == (current_day - 1.day)}
 end

Итак, если я хочу сделать сравнение, например if current.quantity > previous.quantity - я прибегнул к фактическому написанию, если current.last.quantity > previous.last.quantity, но я предполагаю, что есть более идиоматический способ?

Ответы [ 2 ]

2 голосов
/ 09 сентября 2011

Если вы удаляете все записи, кроме одной, почему бы не использовать find, чтобы выбрать одну вещь, которая вас волнует?Примерно так:

def more_or_less?(project, current_day)
  words    = project.words
  current  = words.find { |w| w.wrote_on == current_day }
  previous = words.find { |w| w.wrote_on == (current_day - 1.day) }
  if current.quantity > previous.quantity
    #...
  end
end

Если вы находитесь на земле ActiveRecord, вы можете использовать detect, как говорит сумасшедший, или to_a, чтобы получить простой массив, который вы можете использоватьfind вкл .:

def more_or_less?(project, current_day)
  words    = project.words
  current  = words.detect    { |w| w.wrote_on == current_day }
  previous = words.to_a.find { |w| w.wrote_on == (current_day - 1.day) }
  if current.quantity > previous.quantity
    #...
  end
end
1 голос
/ 09 сентября 2011

обнаружение является псевдонимом для поиска, может быть, это будет работать

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...