0

私がこのようなものを持っているとしましょう:

def find_the_best(array)
  temp = 15435435435 # sufficiently large number
  value = 0
  array.each do |element|
    some_var = function_does_something_complex_and_returns_value(element)
    some_var < temp ? value = element[0]
  end
end

この十分に多数のソリューションは機能しますが、ちょっとハッキーなようです。これを処理するための最良の方法は、特にルビーで、しかし一般的にも同様です。問題は、実際には0に設定してから最初の値を割り当て、それ以降のすべての値は小さい場合にのみ採用する必要があることです。

4

3 に答える 3

3

探しているのは、sort_byオブジェクトのリストを任意の基準で並べ替えるルーチンです。

best = array.sort_by do |element|
  function_does_something_complex_and_returns_value(element)
end.first

最高から最低、または最低から最高のどちらが必要firstかによって、使用する必要がある場合があります。last

于 2012-07-12T17:10:18.487 に答える
3
array.min_by{|e| function_does_something_complex_and_returns_value(e) }

また

array.inject {|m,e| [m, function_does_something_complex_and_returns_value(e)].min }
于 2012-07-12T17:14:32.370 に答える
0

これは、基準に基づく最適な並べ替えの問題のようには見えません。

あなたは最小の値を探しています、一時的な値を持つ必要はありません(あなたが私たちに言っていないことがない限り)。

最初の値が最適であると単純に想定し、チェックを続けます。

best_value = array[0];
foreach( element in array )
{
    if( best_value > element )
        best_value = element;
}
于 2012-07-12T17:46:33.190 に答える