在Ruby中,#each_pair在迭代哈希时优于#each的优势是什么?

clo*_*kpc 6 ruby hash each block

假设我想要像这样访问哈希值:

munsters = {
  "Herman" => { "age" => 32, "gender" => "male" },
  "Lily" => { "age" => 30, "gender" => "female" },
  "Grandpa" => { "age" => 402, "gender" => "male" },
  "Eddie" => { "age" => 10, "gender" => "male" },
  "Marilyn" => { "age" => 23, "gender" => "female"}
}
Run Code Online (Sandbox Code Playgroud)

我可以使用#each两个参数:

munsters.each do |key, value| 
    puts "#{name} is a #{values["age"]}-year-old #{values["gender"]}."
end
Run Code Online (Sandbox Code Playgroud)

或者我可以使用#each_pair两个参数:

munsters.each_pair do |key, value| 
    puts "#{name} is a #{values["age"]}-year-old #{values["gender"]}."
end
Run Code Online (Sandbox Code Playgroud)

或许两者之间的差别并不在这个简单的例子证明了这一点,但有人可以帮助我了解使用的优势#each_pair超过#each

ste*_*lag 17

因为Hash是一个Enumerable,它必须有一个each方法.each_pair可能是一个更清晰的名称,因为它强烈建议将包含键值对的双元素数组传递给块.

它们是彼此的别名:它们共享相同的源代码.