在Ruby中迭代Hash。这两个例子的区别?

时间:2016-10-19 03:24:17

标签: ruby loops hash

我正在努力学习一点Ruby。有人可以向我解释这两个例子之间的区别吗?

说我有哈希:

family = { "Homer" => "dad",
  "Marge" => "mom",
  "Lisa" => "sister",
  "Maggie" => "sister",
  "Abe" => "grandpa",
  "Santa's Little Helper" => "dog"
}

如果我这样迭代:

family.each { |x| puts "#{x}" }

我明白了:

["Homer", "dad"]
["Marge", "mom"]
["Lisa", "sister"]
["Maggie", "sister"]
["Abe", "grandpa"]
["Santa's Little Helper", "dog"]

当我这样迭代时:

family.each { |x, y| puts "#{x}: #{y}" }

我明白了:

Homer: dad
Marge: mom
Lisa: sister
Maggie: sister
Abe: grandpa
Santa's Little Helper: dog

有人可以解释两个结果有何不同(方括号,引号,逗号,冒号是什么意思?),以及何时可以使用一个与另一个?谢谢!

2 个答案:

答案 0 :(得分:1)

当您迭代哈希时,它会将keyvalue对作为参数传递,格式为两个元素的数组:[key, value]。这就是您在第一个示例中看到["Homer", "dad"]的原因,x被分配了数组。

第二个示例是相同的,但在这种情况下,您要将对分配给xyx获取数组的第一个元素,y获取第二个元素,在ruby中称为multiple assignment

2.2.2 :001 > x = {a: 1}.first
 => [:a, 1] 
2.2.2 :002 > x
 => [:a, 1] 
2.2.2 :003 > x,y ={a: 1}.first
 => [:a, 1] 
2.2.2 :004 > x
 => :a 
2.2.2 :005 > y
 => 1 

答案 1 :(得分:0)

在您的第一个示例中,您将遍历哈希的每个完整元素(x),并将其打印为单个键:值对,从而产生括号格式。

在第二个示例中,您再次迭代哈希中的每个元素,但专门将该元素拆分为键和值(xy)被输入{ {1}}语句,并使用您自己的格式打印它们。