根據this post,如果使用符號作爲散列鍵是很好的,那麼您何時需要使用字符串作爲散列鍵?什麼時候需要字符串作爲散列鍵
鍵串聯,例如,
hash["name" + "xxx"]
可能是這樣一種情況,但我認爲這種需求很少見。
根據this post,如果使用符號作爲散列鍵是很好的,那麼您何時需要使用字符串作爲散列鍵?什麼時候需要字符串作爲散列鍵
鍵串聯,例如,
hash["name" + "xxx"]
可能是這樣一種情況,但我認爲這種需求很少見。
如果您在循環中多次執行hash["name"+"xxx"]
,那麼將鍵從循環中拉出並將其變爲符號可能會有好處。這只是一個表演的事情。符號在內存中使用單個位置,但每次創建字符串時都會進行計算。
即使鍵級聯可以很容易地轉換:
hash[ ("name" + "xxx").to_sym ]
簡短的回答是,你使用字符串作爲Ruby的鍵,其中鍵是僅僅是語義上的標籤,使您可以參考在代碼中的值,避免受益。在這種情況下,很明顯符號可以更高效地完成這項工作(正如前面指出的那樣,假設您沒有執行許多轉換來生成標籤)。
當您解析任意數據時,例如XMl或JSON,那麼字符串作爲鍵可能是表達結構的更自然的方式。同樣,從解析器發出的字符串到標籤的轉換時間量可能是一個因素。
如果你有一個.yaml文件看起來像這樣:
- thing1: value1
thing2: value2
thing3: value3
- thing1: value1
thing2: value2
thing3: value3
- thing1: value1
thing2: value2
thing3: value3
和你YAML::load_file('filename')
加載它,那麼你將需要使用字符串鍵。
但是,如果你的YAML文件看起來像這樣:
- :thing1: value1
:thing2: value2
:thing3: value3
- :thing1: value1
:thing2: value2
:thing3: value3
- :thing1: value1
:thing2: value2
:thing3: value3
然後你可以用符號鍵。這種情況下的符號對於紅寶石側來說是優選的,但是紗線會更清潔。
爲什麼downvote? – AGS 2013-03-26 14:38:22
我也想知道 – 2013-03-26 14:39:20
這不是問題的答案。串聯的情況只是OP提出的一個例子,在這個例子中,使用字符串鍵可能(或不可能)有用。指出在這種情況下它沒有用處就是忽略了問題的關鍵。問題是:何時使用字符串鍵有用?這個答案正在討論一個完全不相干的事情。 – sawa 2013-03-26 14:40:01