我在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)
我原以为将哈希变成一个键数组会更慢,但事实并非如此,而each_key
的性能与each
相似。为什么是这样?什么是最好的方法?
答案 0 :(得分:0)
看some code on Github我可以告诉你两个字:这取决于你。如果您的变量名称不是哈希值并不明显,那么使用.each_pair
将使其显而易见(因为哈希是键值PAIR的集合)。如果您的变量名称提到'hash',那么这是有道理的:hash.each |key, value|
。做hash.each_pair do |k|
之类的事情是没有意义的,你将1个块参数传递给`each_pair,这会让代码看起来很混乱。
通过分析Github上的几个页面,我很想得出结论:“最佳方法”是在使用.each
时,您应该将块变量|key, value|
命名为非常明显的你是迭代一个哈希(块参数会给你一个线索,它是一个哈希)。使用.each_pair
时,由于.each_pair表示您正在迭代哈希,因此对于|my_key_1, my_key_2|
这样的块参数的命名可能会有点模棱两可。这一切都是关于在1周(或月)之后查看您的代码并且能够立即告知正在发生的事情。与Python不同,Ruby没有“一种正确的方法”来做某事。