一。給hash新增預設值 :
h = #=>
h.default = 7
h[1] #=> 2
h[3] #=> 4
h[4] #=> 7
h[5] #=> 7
二。給hash新增key-value對:
h = {} #=> {}
h.store("a",1) #=> 1
h["a"] #=> 1
h.fetch("a") #=> 1
h["b"] = 2 #=> 2
h["b"] #=> 2
p h #=>
store和= 方法是別名的關係, fetch和方法是別名的關係。
三。清除hash的key-value對:
h =
刪除全部的k-v對,有兩種方法:
給hash賦空值
用clear方法 (這種方法更快一點)
shift方法隨機刪除k-v對。
h =
h.shift #=> [:a, 1]
h #=>
a = h.shift #=> [:c, 3]
a #=> [:c, 3]
delete, delete_if, reject,reject! 方法刪除指定的k-v對:
h =
h.delete(:a) #=> 1
h #=>
h = #=>
h.delete_if #=> {}
h #=> {}
h = #=>
h.delete_if #=>
h = #=>
h.reject #=>
h #=>
reject方法相當於dup.delete_if{}
四。顛倒hash的k-v對。
h = #=>
x = h.invert #=>
invert方法可以顛倒hash的鍵-值,可是因為hash鍵的唯一性,可能會發生上例那樣的資料丟失!
五。 hash的迭代:
有each, each_key, each_value ,each_pair(each方法的別名)
不舉例了。
六。檢測hash中的key,value:
檢測是否有key:
has_key?(include? 別名, 只能判斷key! ) ,key?, member?
檢測是否有value:
has_value? value?
七。將雜湊轉換為陣列:
h =
h.to_a #=> [[:a, 1], [:b, 2]] 轉換為乙個二維陣列。
h.keys #=> [:a, :b]
h.values #=> [1,2]
下面的方法有用點:
h =
h.values_at(:a,:b) #=> [1, 「2」] 根據指定的key返回對應values的陣列
八。根據條件選擇key-value對:
h.detect #=> [:b, "2"]
detect和find是別名關係,是enumerable模組裡的方法,hash類mixin這個模組,所以也可以用。select 方法,別名是find_all,可以返回多個匹配的k-v對:
h.select #=> [[:a, 1], [:c, 5]]
九。 hash的排序:
可以直接用sort方法,不過會返回乙個二維陣列。
值得注意的是,當hash的key是symbol型別的時候,sort方法會出錯。
十。 合併兩個hash:
使用merge方法,( merge!和update是別名關係 (thx beck) ) 。
h1 = #=>
h2 = #=>
h1.merge h2 #=>
h2.merge h1 #=>
注意看:b值的變化。
當然我們可以使用block來改變這一結局:
h1.merge h2 do |k,old,new|
old < new ? old : new
end#=>
h1.merge h2 do |k,old,new|
p old
p new
end#=>2
#=>3
(當然我們可以使用rails裡active_support實現的revert_merge來實現上述效果)。
十一。 陣列轉換為hash:
當陣列元素為偶數個數的時候:
arr = %w[a b c d] #=> ["a", "b", "c", "d"]
h = hash[*arr] #=>
此時陣列必須為偶數個元素。
十二。 當hash的key是動態變化的時候:
x = [1,2] #=> [1, 2]
h = #=>
h[x] #=> 2
x[0] = 5 #=> 5
h[x] #=> nil
h.rehash #=>
h[x] #=> 2
hash,解決hash衝突的方法
數字分析法 平方取中法 除留餘數法 偽隨機數法 線性探測 二次探測 偽隨機數探測 拉鍊探測。如果負載因子是預設的0.75,hashmap 16 的時候,佔16個記憶體空間,實際上只用到了12個,超過12個就擴容。如果負載因子是1的話,hashmap 16 的時候,佔16個記憶體空間,實際上會填滿16...
魔法方法 hash
hash 求hash值的 底層資料結構為hash表,hash 函式 hash表儲存資料的原理 1,計算雜湊值,決定hash表中儲存的位置 2.與當前位置其他物件去比較,如果相等,則不儲存,不等,才儲存進來 eq print hash a class student def init self,id,...
Redis使用彙總4 hash命令
近期有空,彙總下redis各個資料結構的操作命令。這篇彙總hash命令用於加深記憶。hdel命令用於移除指定的hash中的key值,返回值為移除的數量。jedis jedis new jedis 127.0.0.1 6379 hdel命令執行結果 1hexists命令用於判斷hash中是否存在某個鍵...