Ruby 什么时候需要字符串作为散列键
根据,使用符号作为散列键非常好,那么什么时候需要使用字符串作为散列键 键串联,例如Ruby 什么时候需要字符串作为散列键,ruby,Ruby,根据,使用符号作为散列键非常好,那么什么时候需要使用字符串作为散列键 键串联,例如 hash["name" + "xxx"] 可能就是这样的一种情况,但我认为这种需要很少。如果您在循环中多次执行散列[“name”+“xxx”],那么将密钥从循环中拉出并将其转换为符号可能是有益的。这只是一个性能问题。符号在内存中使用一个位置,但每次创建字符串时都会计算字符串。即使键串联也可以轻松转换: hash[ ("name" + "xxx").to_sym ] 简单的回答是,在Ruby中避免使用字符
hash["name" + "xxx"]
可能就是这样的一种情况,但我认为这种需要很少。如果您在循环中多次执行
散列[“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
- :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
- :thing1: value1
:thing2: value2
:thing3: value3
- :thing1: value1
:thing2: value2
:thing3: value3
- :thing1: value1
:thing2: value2
:thing3: value3
然后可以使用符号作为键。在这种情况下,符号是ruby端的首选,但yaml将更干净,带有字符串。这不是问题的答案。串联情况只是OP提出的一个示例,其中使用字符串键可能有用(也可能不有用)。指出它在那个特定的情况下是没有用的,这就失去了问题的关键。问题是:什么时候使用字符串键有用?这个答案是在讨论一件完全无关的事情。我认为你的标准太高了。