我有一个包含大约 150k 个元素的散列和一个包含 25k 个元素的数组。我需要创建一个新的散列,或修改现有的散列,以删除其键不在数组中的所有元素。这是我现在拥有的:
hash.select {|k,v| array.include?(k)}
new_hash = hash.delete_if {|k,v| !array.include?(k)}
由于比较复杂,这两种方法都非常慢。有什么办法可以加快速度吗?
最佳答案
(hash.keys - array).each{|k| hash.delete(k)}
或者,这可能会更快:
keys_to_be_removed = {}
hash.each{|k, _| keys_to_be_removed[k] = true}
array.each{|k| keys_to_be_removed[k] = false}
keys_to_be_removed.each{|k, v| hash.delete(k) if v}
关键是要避免数组操作,尽可能在hash中做所有事情。
关于ruby - 为什么从基于大型数组的大型散列中选择值如此缓慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15771293/