2015-08-25 61 views
-1

哈希我看到了一個Ruby腳本定義這樣的哈希值的數組:創建的字符串或符號鍵

boxes = [ 
    { :name => "playground", :ip => "19" }, 
    { :name => "elkstack",  :ip => "22" }, 
    { :name => "audit",   :ip => "23" } 
] 

我不太清楚,如果這是定義散列的正確途徑。我以爲你寧願定義這樣的哈希陣列:

boxes = [ 
    { "name" => "playground", "ip" => "19" }, 
    { "name" => "elkstack",  "ip" => "22" }, 
    { "name" => "audit",   "ip" => "23" } 
] 

你能告訴哪一個是正確的哈希定義方式嗎?它是否有副作用,你可能想要避免或引發將這些散列成員定義爲符號?

+1

紅寶石哈希鍵可以是任何類型。 – grenierm5

回答

2

兩種方式都是正確的。在第一種情況下,散列鍵將是符號,在第二種情況下,它們將是字符串。

一般來說,通常使用符號作爲散列鍵,因爲它們稍微更有效一些,因爲當您多次鍵入相同的符號時,它只會被分配一次,反之如果您鍵入相同的字符串N次,它會被分配N次。

事實上,它甚至有一個捷徑。

boxes = [ 
    { name: "playground", ip: "19" }, 
    { name: "elkstack",  ip: "22" }, 
    { name: "audit",   ip: "23" } 
] 
+2

現在,這是不正確的凍結/重複字符串。而且從2.1開始,只有一個「名字」和一個「ip」([demo](https://eval.in/private/8829e56cd45bc8))。 – cremno

+0

您仍然需要暫時手動凍結字符串。 –

+0

所以使用重複字符串時,使用多個具有相同值的字符串的內存問題不應再成爲問題。那麼使用符號不是不利嗎?我讀過那些不是動態創建的符號,它們不會被垃圾回收。符號方法不會是內存泄漏嗎? – wullxz

相關問題