一千萬個為什麽

搜索

查找散列中第一個鍵/值的最快方法,該散列值低於前一個數字

So basically I have a hash which is filled of integers like this ->

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

您會註意到值是散列中第一個數字的位置。

After I sort the hash based on the key, it looks like this ->

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

轉載註明原文: 查找散列中第一個鍵/值的最快方法,該散列值低於前一個數字