Ruby哈希表

哈希表的建立:
   Hash.new
   Hash.new default #这是hash表为空,但是如果使用某个键访问hash表将得到默认值
   Hash[ key, value, key, value....]
   Hash[key=>value, key=>value....]
   {key => value, key => value.....}

访问哈希表
   hash[key]
   hash.keys
   hash.values
   hash.values_at key1,key2.... #得到一个value数组 #注意是values
   hash.index value
   hash.select { |key, value| .....} #得到一个满足条件的key value对数组
   hash.each {|key, value| ....}
   hash.each_key{ |key|....}
   hash.each_value{ |value|....}

哈希表的判定
   hash.empty?
   hash.has_key?
   hash.has_value?

哈希表的修改
   hash[key] = value #如果key不存在,则是新增。否则是修改

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

   hash.fetch("a")            #=> 1
   hash.merge(!) hash1 [block]#hash1会覆盖hash中具有同样key的value block可选,参数为|key, 
      old_value,  new_value|
   hash.delete key [block]#会改变hash
   hash.delete_if block #block = { |key, value| 某个条件,条件满足则执行delete}
   hash.reject (!){ |key, value| condition} #reject!与delete_if相同
   hash.clear
   hash.replace( new_hash ) #会改变原hash表,这里括号不可少

哈希表的转换
   hash.to_a #将hash转换为数组,其中每个元素是一个key, value组成的数组
   hash.to_s
   hash.to_hash #恩,遗留问题........对于ruby的对象还是不太明白。这个东西使用来创造一个对象的别名。但是赋
   值也可以.....Ruby中好像一切相等的东西都有相同的object_id。。。。。

 

数组转换为Hash

  当数组元素为偶数个数的时候:
  arr = %w[a b c d]         #=> ["a", "b", "c", "d"]

  h = Hash[*arr]              #=> {"a"=>"b", "c"=>"d"}

 

Hash的其他操作

   排序

      可以直接用sort方法,不过会返回一个二维数组。 

      值得注意的是,当Hash的key是Symbol类型的时候,sort方法会出错。

    根据条件选择

       h.detect {|k,v| v == "2"}             #=> [:b, "2"]
       detect和find是别名关系,是Enumerable模块里的方法,Hash类mixin这个模块,所以也可以用。select 方法,
       别名是find_all,可以返回多个匹配的k-v对

     翻转键值对

       h = {:a => 1,:b => 1}        #=> {:a=>1, :b=>1}
       x = h.invert                      #=> {1=>:b}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值