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键? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |