下面的代码让我感到困惑的是参数 state
和 abbrev
如何与散列的键和值相匹配?或者换句话说,state
如何与 'oregon'
和 abbrev
与 'OR'
匹配(如果参数与散列中的单词匹配,然后我就可以理解了)
它们是否正确匹配,因为第一个参数与代码块中的第一个值配对?
states = {
'Oregon' => 'OR',
'Florida' => 'FL',
'California' => 'CA',
'New York' => 'NY',
'Michigan' => 'MI'
}
states.each do |state, abbrev|
puts "#{state} is abbreviated #{abbrev}"
end
这段代码的输出:
Oregon is abbreviated OR
Florida is abbreviated FL
California is abbreviated CA
New York is abbreviated NY
Michigan is abbreviated MI
抱歉没能把我的问题说清楚,这还是个新问题:S
谢谢!
最佳答案
each
遍历哈希中的每一对,然后使用通用术语来描述这对,以便您可以编写适用于哈希中所有内容的代码。
如果您查看它如何在数组上运行,可能会更容易看出发生了什么。
[1, 2, 3, 4, 5].each do |num|
puts "Number is #{num}"
end
上面的数组中有五个元素。我选择称它们为“num”,因为它们都是数字,但我可以将每个特定元素称为“item”或“element”或“poodle”或“potato”或任何你喜欢的名称。 |里面的名字| bars 实际上就是您引用数组中的单个项目或 block 中的散列的方式。
现在让我们用散列做同样的事情。
hash = {
1 => "one",
2 => "two",
3 => "three"
}
hash.each do |item|
puts "item: #{item}"
end
这将输出:
item: [1, "one"]
item: [2, "two"]
item: [3, "three"]
理想情况下,我们希望在遍历时能够同时处理散列中的键和值,因此您可能希望按照这些思路做更多的事情:
hash.each do |key, value|
puts "key: #{key}, value: #{value}"
end
输出:
key: 1, value: one
key: 2, value: two
key: 3, value: three
散列的 each
方法本质上是 each_pair
( http://ruby-doc.org/core-2.1.0/Hash.html#method-i-each_pair )。这样,Ruby 期望如果您给它两个变量名,您必须对散列中每个元素的键和值进行操作。还有一些其他有用的方法,例如 each_key
和 each_value
,您可能也会感兴趣。
我不知道这是否完全回答了您的问题。让我知道是否可以详细说明!
关于ruby - ruby '.each do' for-loops 中的参数如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28973645/