2016-10-19 28 views
0

我想學習一點Ruby。有人可以向我解釋這兩個例子之間的區別嗎?在Ruby中對Hash進行迭代。這兩個例子之間的區別?

說,我有一個哈希:

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 

能有人請解釋這兩個結果之間的區別(什麼的方括號,引號,逗號,冒號是什麼意思?),當一個可能使用一個與其他?謝謝!

回答

1

當您迭代散列時,它將以key,value對作爲參數傳遞給兩個元素的數組格式:[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 
0

在你的第一個例子,你遍歷哈希(x)的每個完整的元素,並打印它作爲一個單一鍵:值對,導致括號內的格式。

在你的第二個例子,你遍歷哈希每一個元素了,但具體是分裂成元素被送入puts聲明鍵和值(xy),並用自己的格式打印它們。