Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 什么时候需要字符串作为散列键_Ruby - Fatal编程技术网

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提出的一个示例,其中使用字符串键可能有用(也可能不有用)。指出它在那个特定的情况下是没有用的,这就失去了问题的关键。问题是:什么时候使用字符串键有用?这个答案是在讨论一件完全无关的事情。我认为你的标准太高了。