41 根據 鍵 查詢「鍵值對」的底層過程

2021-10-09 03:30:44 字數 1245 閱讀 9323

我們明白了,乙個鍵值對是如何儲存到陣列中的,根據鍵物件取到值物件,

理解起來就 簡單了。

>>

> a.get(

"name"

)'onepis'

當我們呼叫a.get(「name」),就是根據鍵「name」查詢到「鍵值對」,從而找到值 物件「onepis」

第一步,我們仍然要計算「name」物件的雜湊值:

>>

>

bin(

hash

("name"))

'-0b1010111101001110110101100100101'

和儲存的底層流程演算法一致,也是依次取雜湊值的不同位置的數字。

假設陣列長度為 8,我們可以拿計算出的雜湊值的最右邊 3位數字作為偏移量,即「101」,十進位制是數字 5。

我們檢視偏移量 5,對應的bucket是否為空。

如果為空,則返回none

如果不為空, 則將這個bucket的鍵物件計算對應雜湊值,和我們的雜湊值進行比較,如果相等。

則將對 應「值物件」返回。如果不相等,則再依次取其他幾位數字,重新計算偏移量。

依次取完後, 仍然沒有找到。則返回 none。流程圖如下:

用法總結:

鍵必須可雜湊

數字、字串、元組,都是可雜湊的

自定義物件需要支援下面三點:

支援hash()函式

支援通過\_\_eq__()方法檢測相等性。

a==b為真,則hash(a)==hash(b)也為真。

字典在記憶體中開銷巨大,典型的空間換時間

鍵查詢速度很快往字典裡面新增新建可能導致擴容,導致雜湊表中鍵的次序變化。因此,不要在遍歷字 典的同時進行字典的修改

TP5根據in條件查詢,根據in條件排序資料

一 使用expression類 use think db expression str 5,3,7,6 order new expression field id,str where id in explode str data db name db where where field id,tit...

TP5 1 根據時間條件的查詢

author 咔咔 wechat fangkangfk 獲取今天的部落格 db name blog wheretime create time d select 獲取本週的部落格 db name blog wheretime create time w select 獲取本月的部落格 db name...

AX2009根據當前顯示維度查詢

系統給出了兩種方案 方案1使用巨集 inventdimjoin 呼叫引數在行1到行5已經給出了,按照這幾個引數呼叫就可以了 1 1 inventdimid 2 2 inventdim 3 3 inventdimcriteria 4 4 inventdimparm 5 5 index hint 6 7...