ruby - ruby '.each do' for-loops 中的参数如何工作?

标签 ruby

下面的代码让我感到困惑的是参数 stateabbrev 如何与散列的键和值相匹配?或者换句话说,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_keyeach_value,您可能也会感兴趣。

我不知道这是否完全回答了您的问题。让我知道是否可以详细说明!

关于ruby - ruby '.each do' for-loops 中的参数如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28973645/

相关文章:

ruby - 通过 rvm 安装 Ruby 的问题(运行配置时出错)

ruby-on-rails - 使用 Ruby 创建 HTML 表格?

ruby - 使用 rvm 和 ruby​​ 2.0.0 时 compass 编码错误

json - 当我尝试 sudo gem install json 我收到以下错误

ruby-on-rails - rails : How to render path to namespaced file

ruby-on-rails - rails 中的异常处理有什么好的最佳实践吗?

python - 查找所有具有正方形尺寸的图像 (1 :1 ratio)

ruby - 如何获取对您在方法中调用的对象的引用?

ruby - 为什么 Array#each 返回具有相同元素的数组?

ruby-on-rails - Ruby 从 bash 脚本执行中捕获 stderr 输出