Ruby 如何';比较并找出最好的';最佳做法
假设我有这样的东西:Ruby 如何';比较并找出最好的';最佳做法,ruby,algorithm,code-design,Ruby,Algorithm,Code Design,假设我有这样的东西: 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
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
def查找最佳(数组)
温度=15435435#足够大的数值
值=0
数组。每个do |元素|
some_var=函数做某事,复杂,返回值(元素)
有什么?值=元素[0]
结束
结束
这个足够大的数字解决方案是可行的,但它似乎有点黑客。处理这个问题的最佳方法是什么,特别是在ruby中,但通常也是这样。问题是,它确实应该设置为0,然后分配第一个值,然后只有当值较小时才应采用该值之后的每个值。您要查找的是
sort\u by
例程,该例程根据一些任意标准对对象列表进行排序:
best = array.sort_by do |element|
function_does_something_complex_and_returns_value(element)
end.first
您可能需要使用
first
或last
,具体取决于您是希望从最高到最低还是从最低到最高。您要查找的是sort\u by
例程,该例程根据一些任意条件对对象列表进行排序:
best = array.sort_by do |element|
function_does_something_complex_and_returns_value(element)
end.first
array.min_by{|e| function_does_something_complex_and_returns_value(e) }
您可能需要使用first
或last
,具体取决于您希望从最高到最低还是从最低到最高
array.min_by{|e| function_does_something_complex_and_returns_value(e) }
或
或
这看起来不像是排序问题,而是基于标准的最佳匹配 您正在寻找最小的值,不需要临时值(除非您没有告诉我们) 只需假设第一个值是最好的,然后继续检查
best_value = array[0];
foreach( element in array )
{
if( best_value > element )
best_value = element;
}
这看起来不像是排序问题,而是基于标准的最佳匹配 您正在寻找最小的值,不需要临时值(除非您没有告诉我们) 只需假设第一个值是最好的,然后继续检查
best_value = array[0];
foreach( element in array )
{
if( best_value > element )
best_value = element;
}
你说得对。此外,它还可以找到一条路径的最佳匹配,因此,如果我将三个节点深入到一条路径中,并且知道它是一条松散的路径,我可以在该路径上退出,然后转到下一条路径。在Ruby中使用
foreach
是非常不寻常的。我认为你是对的。我看到for
很少被使用,我甚至记不起上一次是什么时候了,而且忘记了foreach
在Ruby中根本不存在。我认为我们不应该投票反对他使用JS,正如我明确说过的,任何语言都是可以接受的。很抱歉,我只是展示了一些伪代码,并将重点放在了手头的问题上,而不是语言细节上,以确保@NoahClark理解我所指出的差异。你是对的。此外,它还可以找到一条路径的最佳匹配,因此,如果我将三个节点深入到一条路径中,并且知道它是一条松散的路径,我可以在该路径上退出,然后转到下一条路径。在Ruby中使用foreach
是非常不寻常的。我认为你是对的。我看到for
很少被使用,我甚至记不起上一次是什么时候了,而且忘记了foreach
在Ruby中根本不存在。我认为我们不应该投票反对他使用JS,正如我明确说过的,任何语言都是可以接受的。我的道歉-我只是展示了一些伪代码,并将重点放在手头的问题上,而不是语言细节上,以确保@NoahClark理解我所指出的差异。请注意,inject
版本不正确,因为它返回了最高的计算值,不是生成该计算值的对象。使用min\u by
是一个好主意。捕捉得好。我想我可以通过查看数组的第一项来修复它。一般来说,我不太喜欢inject版本,它效率低下。从性能的角度来看,inject
并没有本质上的低效,但正确使用它可能比使用更专业的方法要复杂得多。我指的是我使用inject
的实现,一般不inject
。代码块创建一个表示内存分配的数组,然后调用函数调用min
。两者都是无用的开销。当然,对于小型阵列来说,这是一个没有实际意义的问题。小型阵列的开销非常小。还要注意,不带参数的inject
只使用第一个元素作为种子。将array.first
放入其中不仅是冗余的,而且是不正确的,因为您在第一次迭代中测试了元素0到元素0。请注意,此处的inject
版本不正确,因为它返回的是最高的计算值,而不是产生该计算值的对象。使用min\u by
是一个好主意。捕捉得好。我想我可以通过查看数组的第一项来修复它。一般来说,我不太喜欢inject版本,它效率低下。从性能的角度来看,inject
并没有本质上的低效,但正确使用它可能比使用更专业的方法要复杂得多。我指的是我使用inject
的实现,一般不inject
。代码块创建一个表示内存分配的数组,然后调用函数调用min
。两者都是无用的开销。当然,对于小型阵列来说,这是一个没有实际意义的问题。小型阵列的开销非常小。还要注意,不带参数的inject
只使用第一个元素作为种子。将array.first
放入其中不仅是冗余的,而且是不正确的,因为您在第一次迭代中测试了元素0到元素0。我们如何知道运行排序比简单的循环查找最小值更有效?代码更少,但在后台执行更多。我们如何知道运行排序比简单的循环查找最小值更有效?代码更少,但在后台执行更多。