Hash方法彙總

2021-09-01 11:09:51 字數 2508 閱讀 8554

一。給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中是否存在某個鍵...