2014-03-29 55 views
0

當我做:symbol == :symbol我發現它是真的。他們是一樣的。符號如何相等?

如果是這樣的情況下,如何才能創建陣列是這樣的:

a = [{:name=>"Michael"},{:name=>"John"}] 
+2

爲什麼你認爲這不應該是可能的? –

+1

那裏沒有矛盾。 'a'中的元素是獨特的,而且數組可以包含重複的元素。你可能會想到一個散列,在這種情況下,鍵必須是唯一的,並且在這組鍵中你確實不會找到兩個':symbol'。 – jkrmr

+0

@DouglasFShearer它只是混淆了我作爲第一個:名字與第二個名字相同:在另一個散列中的名字 –

回答

2

請看下面的代碼:

a = [{:name=>"Michael"},{:name=>"John"}] 
a.map(&:object_id) # => [70992070, 70992050] 

這是因爲a是哈希數組,但他們2個不同的哈希對象。在Ruby中,Hash必須有uniq鍵。但是2個不同的哈希可以具有與密鑰相同的命名符號。

2

你似乎對散列鍵感到困惑。一個散列不能包含相同的密鑰兩次,但是兩個不同的散列可以具有與密鑰相同的對象。例如:

a_key = "hello" 
spanish = { a_key => "hola" } 
french = { a_key => "bonjour" } 
some_array = [spanish, french] 

最重要的是,它是可能的陣列包含重複的對象(例如[1, 2, 1]是有效的) - 但這些都不是即使重複。包含相同密鑰的兩個散列仍然是不同的對象。

對於這樣的數組,沒有什麼不尋常的。實際上,數組中的哈希通常具有共同的鍵,這是很正常的,因爲通常如果你想把東西放在一個數組中,這意味着它們有一些共同點,你可以用同樣的方式處理它們。