Tag:

在Ruby中哈希“has_key”的复杂性

我有一个哈希vars = {“a” => “Name”, “b” => “Address” , “c” => “Phone”} 。 我想检查一下这行的性能: vars.has_key(:b)? 是O(1)还是O(哈希的大小)?

在Ruby中将大型哈希划分为N个较小哈希的最有效方法是什么?

问题 我正在研究涉及分片的问题。 作为问题的一部分,我需要找到以两个或更多部分划分大型Ruby哈希(> 200,0000个条目)的最快方法。 有没有非O(n)方法? 是否有非Ruby即C / C ++实现? 请不要使用将哈希转换为数组并重建N个不同哈希的简单方法回答示例。 我担心的是Ruby太慢而无法完成这类工作。 最初的方法 这是我尝试的第一个解决方案。 吸引人的是: 它不需要在哈希中盲目循环 它不需要管理计数器来在分片中均匀地分配成员。 它短而整洁 好吧,它不是O(n),但它依赖于标准库中的方法,我认为这比编写自己的Ruby代码要快。 pivot = s.size / 2 slices = s.each_slice(pivot) s1 = Hash[*slices.entries[0].flatten] s2 = Hash[*slices.entries[1].flatten] 更好的解决方案 马克和迈克非常友好地提出方法。 我不得不承认Mark的方法感觉不对 – 它完全按照我不想要的方式 – 它循环了所有的成员并评估了有条件的情况 – 但是因为他花时间去做评估,我想我应该尝试类似的方法和基准测试。 这是我的方法的改编版本(我的密钥不是数字所以我不能逐字逐句采用他的方法) def split_shard(s) shard1 = {} shard2 = {} t = Benchmark.measure do n […]