1

Enumerable、、などmax_byのいくつmin_byかのメソッドはfind、繰り返されたアイテムの関連する値を評価し、元のアイテムの1つを返します。元の値ではなく、評価されたフォームが必要になることがよくあります。この例では:

max = some_enumerable_object.max_by{|e| some_function(e)}
some_function(max)

max_byアイテムを選択しますが、それ自体ではなくmax値が必要です。反復内ですでに評価されているため、実行は計算の無駄に思えます。再計算せずにアクセスする方法はありますか?some_function(max)maxsome_function(max)some_function(max)

4

2 に答える 2

2

map次に呼び出すことができますmax

max_value = some_enumerable_object.map { |e| some_function(e) }.max
于 2012-10-11T03:03:55.343 に答える
1

map元の値と計算された値を含むサブ配列を作成するためにいつでも使用できます。

max = some_enumerable_object.map{ |o|
  [o, some_function(o)] 
}.max_by{ |o,e| e }

完了したら、元の値、または変数内の関数の結果を取得できますmax

于 2012-10-11T03:06:42.623 に答える