Ruby中Hash的11个问题解答
最近在学习Rails,因为学习的java为入门语言.些许的不太适应.特别是Ruby的Hash.不过细细的想想就通了.基本上都是通的Key-Value.除了刚开始不太适应写法没什么大的问题.这个是我在网上看到的一篇日志.
1.如何创建Hash?
x=Hash.new x={} x={:a=>1,:b=>2}
这些都是创建Hash的方法。
第一个和第二个一样,表示创建空的Hash.
第三个表示创建的Hash,有2对键/值。
2.Hash的键是哪些类型?
可以是任何目标,如:
irb(main):002:0>x={} =>{} irb(main):003:0>x[1]=2 =>2 irb(main):004:0>x["a"]="b" =>"b" irb(main):005:0>x[:z]=100 =>100 irb(main):006:0>x[[1,2,3]]=[4,5,6] =>[4,5,6] irb(main):007:0>x =>{"a"=>"b",[1,2,3]=>[4,5,6],1=>2,:z=>100}
有两点注意:
(1)任何目标包括数组、Hash都可以是Key。
(2)使用字符作为Key时,最好使用对应的符号。例如,键"a"可以用:a来代替。这是因为每个字符"a"都是一个目标,而:a是唯一的,
更节省内存。
3.如何给Hash赋默认的值?
irb(main):003:0>x=Hash.new([]) =>{} irb(main):004:0>x[:a] =>[]
表示创建一个Hash,它的默认值是空的数组[]。
然后访问x[:a],虽然这个键没有事先定义,但还是有默认值。
请注意:这种方法赋的默认值,都指向同一个目标,这个目标改变了,会影响到所有默认值。
irb(main):005:0>x[:a]<<1 =>[1] irb(main):006:0>x[:b] =>[1]
要做到每个键都对应唯一的默认值,应该如此创建Hash:
irb(main):007:0>y=Hash.newdo|h,k|h[k]=[]end =>{}
让我们再看看:
irb(main):009:0>y[:a]<<1 =>[1] irb(main):010:0>y[:b] =>[]
一个值的改变,不会影响到其他默认值。
4.如何遍历Hash?
irb(main):018:0*x={1=>2,3=>4,5=>6} =>{5=>6,1=>2,3=>4}
irb(main):019:0>x.eachdo|k,v|puts"#{k}#{v}"end 56 12 34 =>{5=>6,1=>2,3=>4}