ruby 数组中的元素是hash,改变一个元素的hash值,为什么所有元素的hash都会改变

Python036

ruby 数组中的元素是hash,改变一个元素的hash值,为什么所有元素的hash都会改变,第1张

终于明白你的意思了。这不是 hash 的问题,是 Array.new 的用法不对,你这样做是指用{}这个对象填充3遍,就是说是同一个对象填充了3次,所以无论你修改哪一个对象,其它的都会跟着变,因为是同一对象。

http://www.ruby-doc.org/core-2.2.0/Array.html#method-c-new-label-Common+gotchas

以上是 ruby 文档,他给出了正确的用法:

a = Array.new(2) { Hash.new }

一。给Hash添加默认值 :

h = {1,2,3,4} #=>{1 =>2, 3 =>4}

h.default = 7

h[1]#=> 2

h[3]#=> 4

h[4]#=> 7

h[5]#=> 7

二。给Hash添加key-value对:

h = {} #=>{}

h.store("a",1) #=>1

h["a"] #=>1

h.fetch("a")#=>1

h["b"] = 2 #=>2

h["b"] #=>2

p h#=>{"a"=>1, "b"=>2}

三。清除Hash的key-value对:

h = {:a =>1, :b =>2}

删除全部的k-v对,有两种方法:

给hash赋空值

用clear方法 (这种方法更快一点)

ruby hash可以不带花括号

node.master: true

指定该节点是否有资格被选举成为node,默认是true,es是默认集群中的第一台机器为master,如果这台机挂了就会重新选举master。

node.data: true

指定该节点是否存储索引数据,默认为true。

index.number_of_shards: 5

设置默认索引分片个数,默认为5片。

index.number_of_replicas: 1

设置默认索引副本个数,默认为1个副本。

path.conf: /path/to/conf

设置配置文件的存储路径,默认是es根目录下的config文件夹。