Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.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_Hash - Fatal编程技术网

Ruby 使用字符串或符号作为键创建哈希

Ruby 使用字符串或符号作为键创建哈希,ruby,hash,Ruby,Hash,我看到一个ruby脚本,它定义了如下哈希数组: boxes = [ { :name => "playground", :ip => "19" }, { :name => "elkstack", :ip => "22" }, { :name => "audit", :ip => "23" } ] 我不确定这是否是定义散列的正确方法。我想你应该这样定义这个散列数组: boxes = [ { "name" =>

我看到一个ruby脚本,它定义了如下哈希数组:

boxes = [
  { :name => "playground",    :ip => "19" },
  { :name => "elkstack",      :ip => "22" },
  { :name => "audit",         :ip => "23" }
]
我不确定这是否是定义散列的正确方法。我想你应该这样定义这个散列数组:

boxes = [
  { "name" => "playground",    "ip" => "19" },
  { "name" => "elkstack",      "ip" => "22" },
  { "name" => "audit",         "ip" => "23" }
]

你能告诉我哪一种是定义散列的正确方法吗?将这些散列成员定义为符号是否有副作用?这两种方法都是正确的。在第一种情况下,哈希键将是符号,在第二种情况下,它们将是字符串

一般来说,通常使用符号作为散列键,因为它们的效率稍高一些,因为当您多次键入相同的符号时,它只会被分配一次,反之,如果您键入相同的字符串N次,它将被分配N次

事实上,它甚至有一条捷径

boxes = [
   { name: "playground",    ip: "19" },
   { name: "elkstack",      ip: "22" },
   { name: "audit",         ip: "23" }
]

ruby散列的键可以是任何类型。现在,这对于冻结/重复数据消除的字符串不再正确。而且,由于2.1只有一个名称和一个ip。因此,对于重复数据消除字符串,使用相同值的多个字符串的内存问题应该不再是一个问题。那么使用符号不是一个缺点吗?我已经读到,不是动态创建的符号不会被垃圾收集。符号方法不是内存泄漏吗?在这种情况下,冻结和重复数据消除都会自动完成。谢谢你的回答,simone carletti。同时也感谢你的便捷快捷方式。下次我会用的。如果你能帮我的话,我仍然有兴趣回答我的其他评论:使用重复数据消除的字符串,因此在使用字符串时没有内存问题,那么使用符号不是很糟糕吗?好吧,它们不是垃圾收集的,这只会导致程序结束时内存被释放,不是吗?