ruby-on-rails - 在散列中找到低于前一个数字的第一个键/值的最快方法

标签 ruby-on-rails ruby algorithm optimization

所以基本上我有一个像这样填充整数的散列 ->

{5=>1, 3=>2, 2=>3, 1=>4, 4=>5}

您会注意到这些值是散列中第一个数字的位置。

我根据key对hash进行排序之后,看起来是这样的->

{1=>4, 2=>3, 3=>2, 4=>5, 5=>1}

我想做的是从原始哈希中删除第一个值低于前一个元素的元素。

所以我能想到的最明显的方法是:

lastvalue = -1
sortedNumbers.each{ |key,value|
   if value < lastvalue
      original_array.delete(key)
      return "deleted element"
   end

  last_value = value
}

就正确性/速度而言,这是做到这一点的最佳方式吗?这甚至是解决一般问题的一种比较好的方法吗?

最佳答案

要比较 Enumerable 的连续值,请使用 #each_cons:

key = sortedNumbers.each_cons(2) do |(k1, v1), (k2, v2)|
  break k2 if v2 < v1
end
sortNumbers.delete(key)

关于ruby-on-rails - 在散列中找到低于前一个数字的第一个键/值的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8057849/

相关文章:

java - 将 16 位 pcm 转换为 8 位

algorithm - 计算下一次执行 cron 作业的时间

ruby-on-rails - 当 session 存储在 memcached (Rails) 中时,用户会获取其他用户的 session

ruby - 我是否需要 Procfile 才能将 Sinatra 应用程序推送到 Heroku?

ruby-on-rails - Rails 茧 gem : Undefined Method 'new_record?' on link_to_remove_association with Wicked

ruby - 如何找到运行时调用 Ruby 方法的位置?

ruby-on-rails - rails : Is there a rails trick to adding commas to large numbers?

java - (LeetCode) 包含 Duplicate III

ruby-on-rails - HTTP POST,头 :ok returning 1 mystery byte

ruby-on-rails - Rails 中的 session 管理 (2.3)