【发布时间】:2011-07-26 06:01:07
【问题描述】:
我正在创建一个散列来表示 MySQL 数据库中的一些记录。哈希键对应数据库 ID 字段,哈希值对应数据库名称字段。
什么更好?为什么?
-
数组
这可行,但 Ruby 似乎对稀疏数组效率低下,因为设置所有中间索引 tp
nil的值似乎有额外的开销。fruits = [] fruits[23] = "apple" fruits[109] = "orange" # ... fruits[23429] = "banana" -
以fixnum为键的散列
我最喜欢这个,但我一直认为最好在哈希中使用符号作为键。使用 fixnums 作为哈希中的键是否同样好?我不确定是否是这样,但我认为
34.hash因为 fixnums 的性质,即34.equal? 34是真的,而"hi".equal? "hi"是假的。fruits = { 23 => "apple", 109 => "orange", # ... 23429 => "banana" } -
以fixnums的内部字符串表示作为键的散列
通过将 fixnums 转换为字符串和符号,我可以将符号用作键。然而,这种转换很烦人,有人曾经告诉我,实习字符串效率低下。是这样吗?他们只是在我看来很难看。
fruits = { :"23" => "apple", :"109" => "orange", # ... :"23429" => "banana" } -
以符号为键的散列
我可以通过在每个键前面加上一个字母字符来获得更漂亮的符号(并且还使用新的 Ruby 1.9 哈希语法),但是,这个解决方案还需要转换。
fruits = { i23: "apple", i109: "orange", # ... i23429: "banana" }
【问题讨论】:
-
我真的不明白仅使用符号作为哈希键的原因。您是否有任何链接可以很好地解释为什么会出现这种情况?
-
这个blog post on understanding Ruby symbols很好地解释了为什么以及何时在字符串上使用符号。还有这个blog post recommends a ruby symbol as an excellent choice for a hash key。但是,fixnums 呢?它们不是与用作哈希键的符号一样好吗?我认为他们是。
-
谢谢,如果符号在哈希中解决的主要问题是内存管理,那么我认为@DigitalRoss 100% 正确。
标签: ruby hash key symbols fixnum