我在 this question 中初始化了一个哈希值并运行了一些基准测试。
Benchmark.measure { a = h.keys }
#=> 0.010000 0.000000 0.010000 ( 0.019832)
Benchmark.measure { a.each { |k| } }
#=> 0.060000 0.000000 0.060000 ( 0.057262)
Benchmark.measure { h.each { |k, v| } }
#=> 0.320000 0.000000 0.320000 ( 0.319768)
Benchmark.measure { h.each_key { |k| } }
#=> 0.310000 0.000000 0.310000 ( 0.312656)
Benchmark.measure { h.each_pair { |k, v| } }
#=> 0.330000 0.000000 0.330000 ( 0.331452)
我原以为将hash转成key数组会比较慢,其实不然,而且each_key
的性能和each
差不多。为什么是这样?什么是最好的方法?
最佳答案
查看some code on Github我可以告诉你两个字:视情况而定。如果您的变量名是一个散列并不明显,那么使用 .each_pair
将使它变得明显(因为散列是键值对的集合)。如果您的变量名提到“哈希”,那么这是有道理的:hash.each |key, value|
。像 hash.each_pair do |k|
这样将 1 个 block 参数传递给 `each_pair 是没有意义的,这会使代码看起来很困惑。
通过分析 Github 上的几个页面,我很想得出结论,“最佳方法”是在使用 .each
时,您应该将 block 变量命名为 |key, value|
以使其非常明显,您正在迭代哈希( block 参数将为您提供它是哈希的线索)。使用 .each_pair
时,您可以更加模糊地命名 block 参数,例如 |my_key_1, my_key_2|
,因为 .each_pair 表示您正在迭代哈希。这一切都是为了在 1 周(或一个月)后查看您的代码,并能够立即告诉您发生了什么。与 Python 不同,Ruby 没有做某事的“唯一正确方法”。
关于ruby - 迭代散列中的键的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26247361/