加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Ruby:散列键的属性

发布时间:2020-12-17 03:59:11 所属栏目:百科 来源:网络整理
导读:我将粘贴一个我尝试过的简单示例,以便那些阅读此内容的人会清楚. irb(main):001:0 h = { }= {}irb(main):002:0 a=[1,2,3]= [1,3]irb(main):003:0 a.object_id= 69922343540500irb(main):004:0 h[a] = 12 #Hash with the array as a key= 12irb(main):005:0 a
我将粘贴一个我尝试过的简单示例,以便那些阅读此内容的人会清楚.

irb(main):001:0> h =  { }
=> {}
irb(main):002:0> a=[1,2,3]
=> [1,3]
irb(main):003:0> a.object_id
=> 69922343540500


irb(main):004:0> h[a] = 12          #Hash with the array as a key
=> 12
irb(main):005:0> a << 4             #Modified the array
=> [1,3,4]
irb(main):006:0> a.object_id        #Object id obviously remains the same.
=> 69922343540500
irb(main):007:0> h[a]               #Hash with the same object_id now returns nil.
=> nil
irb(main):008:0> h                  #Modified hash
=> {[1,4]=>12}
irb(main):009:0> h[[1,4]]       #Tried to access the value with the modified key -
=> nil


irb(main):011:0> h.each { |key,value| puts "#{key.inspect} maps #{value}" }
[1,4] maps 12
=> {[1,4]=>12}

现在,当我遍历哈希时,可以识别密钥和值之间的映射.

有人可以解释一下ruby hash的这种行为以及散列键的属性是什么.

1)正如我上面提到的,object_id没有改变 – 那么为什么值设置为nil.

2)是否有任何可能的方法,以便我可以从散列’h’返回值’12’,因为上面提到的h [[1,4]]返回nil.

解决方法

使用#eql检查哈希键?方法,因为[1,3]不是.eql?到[1,4]你的哈希查找有不同的结果.

如果语义不适合你,你是否想要使用除Array之外的其他东西作为Hash键?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读