當我做:symbol == :symbol
我發現它是真的。他們是一樣的。符號如何相等?
如果是這樣的情況下,如何才能創建陣列是這樣的:
a = [{:name=>"Michael"},{:name=>"John"}]
當我做:symbol == :symbol
我發現它是真的。他們是一樣的。符號如何相等?
如果是這樣的情況下,如何才能創建陣列是這樣的:
a = [{:name=>"Michael"},{:name=>"John"}]
請看下面的代碼:
a = [{:name=>"Michael"},{:name=>"John"}]
a.map(&:object_id) # => [70992070, 70992050]
這是因爲a
是哈希數組,但他們2個不同的哈希對象。在Ruby中,Hash
必須有uniq鍵。但是2個不同的哈希可以具有與密鑰相同的命名符號。
你似乎對散列鍵感到困惑。一個散列不能包含相同的密鑰兩次,但是兩個不同的散列可以具有與密鑰相同的對象。例如:
a_key = "hello"
spanish = { a_key => "hola" }
french = { a_key => "bonjour" }
some_array = [spanish, french]
最重要的是,它是可能的陣列包含重複的對象(例如[1, 2, 1]
是有效的) - 但這些都不是即使重複。包含相同密鑰的兩個散列仍然是不同的對象。
對於這樣的數組,沒有什麼不尋常的。實際上,數組中的哈希通常具有共同的鍵,這是很正常的,因爲通常如果你想把東西放在一個數組中,這意味着它們有一些共同點,你可以用同樣的方式處理它們。
爲什麼你認爲這不應該是可能的? –
那裏沒有矛盾。 'a'中的元素是獨特的,而且數組可以包含重複的元素。你可能會想到一個散列,在這種情況下,鍵必須是唯一的,並且在這組鍵中你確實不會找到兩個':symbol'。 – jkrmr
@DouglasFShearer它只是混淆了我作爲第一個:名字與第二個名字相同:在另一個散列中的名字 –