0

鉴于根据这篇文章使用符号作为散列键非常棒,你什么时候需要使用字符串作为散列键?

键连接,例如

 hash["name" + "xxx"] 

可能是这样一种情况,但我认为这种需求很少见。

4

3 回答 3

2

甚至键连接也可以轻松转换:

 hash[ ("name" + "xxx").to_sym ]

简短的回答是,避免在 Ruby 中使用字符串作为键,您可以从中受益,因为键只是语义标签,使您能够在代码中引用值。在这种情况下,很明显符号可以更有效地完成这项工作(好吧,如上所述,前提是您没有执行很多转换来生成标签)。

当您解析任意数据(例如 XMl 或 JSON)时,字符串作为键可能是表达结构的更自然方式。同样,从解析器发出的字符串到标签的转换时间可能是一个因素。

于 2013-03-26T14:22:44.743 回答
0

如果您hash["name"+"xxx"]在循环中执行多次,那么将键拉出循环并将其转换为符号可能会有所帮助。这只是一个性能问题。符号使用内存中的单个位置,但字符串在每次创建时都会被计算。

于 2013-03-26T14:22:21.560 回答
0

如果您有一个如下所示的 .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

然后,您可以使用符号作为键。在这种情况下,ruby 方面首选符号,但 yaml 使用字符串会更干净。

于 2013-03-26T14:44:36.717 回答