查找散列中第一个键/值的最快方法,该散列值低于前一个数字

时间:2011-11-08 22:16:14

标签: ruby-on-rails ruby algorithm optimization

所以基本上我有一个哈希,它填充了这样的整数 - >

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

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

根据密钥对哈希进行排序后,它看起来像这样 - >

{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
}

这是在正确/速度方面做到这一点的最佳方法吗?这一般是解决这个问题的中等好方法吗?

2 个答案:

答案 0 :(得分:2)

我会这样写:

lastvalue = -1
original_array.clone.each{ |key,value|
     original_array.delete(key); return "deleted element" if value < last_value
     last_value = value
}

基本上相同的东西,但更聪明的代码。

答案 1 :(得分:2)

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

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