0

いくつかの機能を考えてみましょうfoo:

def foo(input)
  input * 2
end

いくつかの配列の入力の最大値を取得する方法はa?

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

次のようなもの (これは機能しません) は 9 を返します。

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

どうやってするの?

ルビー1.9.2

4

2 に答える 2

7

max_byではなく、が必要ですmaxhttp://www.ruby-doc.org/core-1.9.3/Enumerable.html#method-i-max_by

max:

最大値を持つ enum 内のオブジェクトを返します。最初の形式は、すべてのオブジェクトが Comparable を実装していることを前提としています。2 番目は、ブロックを使用して a <=> b を返します。

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"
于 2012-04-03T04:07:02.947 に答える
1

配列マップを使用:a.map{|v|foo(v)}.max

于 2012-04-03T04:10:02.973 に答える