ruby - 为什么从基于大型数组的大型散列中选择值如此缓慢?

标签 ruby

我有一个包含大约 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/

相关文章:

ruby-on-rails - 如何将 REST 与以 XML 表示的嵌套资源一起使用?

ruby-on-rails - Rails - has_many 关系导致 NoMethodError

ruby - 从 Ruby 中的 MongoDB 嵌套哈希中提取正确的字符串

ruby - 如何在 Ruby 中编码 lambda (Proc)?

ruby-on-rails - bundle 有什么意义?

ruby - 如何将字符串附加到存在或不存在的变量?

ruby-on-rails - Redmine Rails 服务器堆栈级别太深错误

ruby - Ruby 中有包实现吗?

ruby-on-rails - 防止 Maruku 发布这么多日志警告

mysql - 带有 update_attribute 的 Rails rake 任务导致 Mysql2::Error: Unknown column 'NaN' in 'field list'