如何更高效地定位数组中的最小元素索引?
- 内容介绍
- 文章标签
- 相关推荐
本文共计363个文字,预计阅读时间需要2分钟。
Ruby 中有一个更简洁的方式来实现查找数组中从起始索引到结束索引的最小值,以下是一个示例:
rubydef min(array, starting, ending) minimum=starting array[starting...ending].each do |i| minimum=i if array[i]
这个函数使用迭代而不是嵌套循环来比较元素,使代码更加高效。当然,如果数组已经排序,你可以使用更简单的方法:
rubydef min(array, starting, ending) array[starting...ending].minend
这样可以直接使用 Ruby 的内置方法 `min`,使代码更简洁易读。
现在我有def min(array,starting,ending) minimum = starting for i in starting+1 ..ending if array[i]<array[minimum] minimum = i end end return minimum end
Ruby中有更好的“实现”吗?这个仍然看起来像c-ish.
谢谢.
得到一个项目索引对的数组,并找到具有Enumerable #min的最小值(这也是原始数组的最小值).
% irb irb> require 'enumerator' #=> true irb> array = %w{ the quick brown fox jumped over the lazy dog } #=> ["the", "quick", "brown", "fox", "jumped", "over", "the", "lazy", "dog"] irb> array.enum_for(:each_with_index).min #=> ["brown", 2]
如果要将其绑定到特定的数组索引:
irb> start = 3 #=> 3 irb> stop = 7 #=> 7 irb> array[start..stop].enum_for(:each_with_index).min #=> ["fox", 0] irb> array[start..stop].enum_for(:each_with_index).min.last + start #=> 3
本文共计363个文字,预计阅读时间需要2分钟。
Ruby 中有一个更简洁的方式来实现查找数组中从起始索引到结束索引的最小值,以下是一个示例:
rubydef min(array, starting, ending) minimum=starting array[starting...ending].each do |i| minimum=i if array[i]
这个函数使用迭代而不是嵌套循环来比较元素,使代码更加高效。当然,如果数组已经排序,你可以使用更简单的方法:
rubydef min(array, starting, ending) array[starting...ending].minend
这样可以直接使用 Ruby 的内置方法 `min`,使代码更简洁易读。
现在我有def min(array,starting,ending) minimum = starting for i in starting+1 ..ending if array[i]<array[minimum] minimum = i end end return minimum end
Ruby中有更好的“实现”吗?这个仍然看起来像c-ish.
谢谢.
得到一个项目索引对的数组,并找到具有Enumerable #min的最小值(这也是原始数组的最小值).
% irb irb> require 'enumerator' #=> true irb> array = %w{ the quick brown fox jumped over the lazy dog } #=> ["the", "quick", "brown", "fox", "jumped", "over", "the", "lazy", "dog"] irb> array.enum_for(:each_with_index).min #=> ["brown", 2]
如果要将其绑定到特定的数组索引:
irb> start = 3 #=> 3 irb> stop = 7 #=> 7 irb> array[start..stop].enum_for(:each_with_index).min #=> ["fox", 0] irb> array[start..stop].enum_for(:each_with_index).min.last + start #=> 3

