• hash
  • Ruby hash

    hash

    创建

    # 引用
    irb(main):044:0> a={key:'value'} # 这种情况下key是sybol类型,所以取它的值时a[:key]
    => {:key=>"value"}
    irb(main):045:0> b =a
    => {:key=>"value"}
    irb(main):046:0> b.object_id
    => 70368301765400
    irb(main):047:0> a.object_id
    => 70368301765400
    irb(main):049:0> a[:key]='foo'
    => "foo"
    irb(main):050:0> b
    => {:key=>"foo"}
    
    # 指定初始值
    irb(main):053:0> h=Hash.new(3)
    => {}
    irb(main):054:0> h[0]
    => 3
    irb(main):055:0> h[1]
    => 3
    irb(main):056:0> h
    => {}
    
    #初始值只是一份引用,当中途改变时,后面创建的也都会改变
    irb(main):057:0> h = Hash.new([])
    => {}
    irb(main):058:0> h[:a]<<1
    => [1]
    irb(main):059:0> h[:b]
    => [1]
    
    # 生成不同的值,与array类似,要使用block来实现
    irb(main):060:0> h =Hash.new{|h,k| h[k]=[]}
    => {}
    irb(main):061:0> h[:a] << 1
    => [1]
    irb(main):062:0> h
    => {:a=>[1]}
    irb(main):063:0> h[:b]
    => []
    irb(main):064:0> h
    => {:a=>[1], :b=>[]}
    
    irb(main):065:0> h[:c]=3 # 赋值
    => 3
    irb(main):066:0> h
    => {:a=>[1], :b=>[], :c=>3}
    irb(main):067:0> h.delete(:b) # 删除
    => []
    irb(main):068:0> h
    => {:a=>[1], :c=>3}
    irb(main):069:0> h.assoc(:c) # 同时取key,value
    => [:c, 3]
    irb(main):070:0> h.empty? # 是否为空
    => false
    irb(main):071:0> h.has_value?(2) # 是否有某值
    => false
    irb(main):072:0> h.has_key?(:c)  # 是否有某键
    => true
    irb(main):073:0> h.keys  # 所有的键
    => [:a, :c]
    irb(main):074:0> h.values  # 所有值
    => [[1], 3]
    irb(main):075:0> h.to_a  # 转成数组
    => [[:a, [1]], [:c, 3]]
    irb(main):076:0> h2={d:4}
    => {:d=>4}
    irb(main):077:0> h.merge(h2)  # 合并
    => {:a=>[1], :c=>3, :d=>4}
    # 遍历 ,遍历的顺序是插入的顺序
    irb(main):079:0> h.each{|k,v| p [k,v]}  # 遍历键值
    [:a, [1]]
    [:c, 3]
    => {:a=>[1], :c=>3}
    irb(main):080:0> h.each_key {|k| p k} # 遍历键
    :a
    :c
    => {:a=>[1], :c=>3}
    irb(main):081:0> h.each_value {|v| p v}  # 遍历值
    [1]
    3
    => {:a=>[1], :c=>3}
    
    irb(main):082:0> h.select{|k| k==:a}
    => {:a=>[1]}
    

    上一篇:Ruby array

    下一篇:Ruby set range