Как вы используете max_by с перечислимым, если вам нужно отфильтровать значения?

#ruby-on-rails #ruby

#ruby-on-rails #ruby

Вопрос:

Как бы я это сделал? Прямо сейчас он создает нулевые значения, когда пользователь мужского пола, а затем операция <==> завершается с ошибкой.

 @user.max_by{|user_id, user| user.height if user.female?}
  

Ответ №1:

Вы можете объединить их в цепочку, поэтому сделайте свой выбор перед агрегированием

 @user.select{|user| user.female?}.max_by{|user_id, user| user.height}
  

Кроме того, вы должны быть в состоянии упростить (просто немного синтаксического сахара):

 @user.select(amp;:female?).max_by(amp;:height)
  

Комментарии:

1. круто, как называется процесс, который вы используете во втором примере? Я хочу узнать об этом больше. Спасибо!

2. Во втором примере используется символ#to_proc . Обратите внимание, что это будет немного медленнее , чем стандартные блоки в некоторых версиях Ruby.

3. @Грег Кэмпбелл — отличный пост … любой, кто читает это, должен прочитать эту ссылку. заголовок для меня: оба ruby 1.8.7 и 1.9.2 подходят для использования вышеуказанного синтаксиса. Если вы используете другое, проверьте ссылку.