Как получить максимум произвольной функции в Ruby? - PullRequest
0 голосов
/ 03 апреля 2012

Рассмотрим некоторую функцию foo:

def foo(input)
  input * 2
end

Как получить максимальное значение ввода для некоторого массива a?

a = [3, 5, 7, 9, 6]

Что-то вроде следующего (которое нене работает) должен вернуть 9:

a.max do |value|
  foo(value)
end

Как это сделать?

Ruby 1.9.2

Ответы [ 2 ]

6 голосов
/ 03 апреля 2012

Вам нужно max_by, а не max. http://www.ruby -doc.org / ядро-1.9.3 / Enumerable.html # метод-я-max_by

max

Возвращает объект в enum с максимальным значением. Первая форма предполагает, что все объекты реализуют Comparable; второй использует блок для вернуть <=> б.

a = %w(albatross dog horse)
a.max                                  #=> "horse"
a.max {|a,b| a.length <=> b.length }   #=> "albatross"

Так что max действительно берет блок, но он не делает то, что вы ожидали.

max_by:

Возвращает объект в enum, который дает максимальное значение из заданного блок.

Если блок не указан, вместо него возвращается перечислитель.

a = %w(albatross dog horse)
a.max_by {|x| x.length }   #=> "albatross"
1 голос
/ 03 апреля 2012

использовать карту массива: a.map{|v|foo(v)}.max

...