我們明白了,乙個鍵值對是如何儲存到陣列中的,根據鍵物件取到值物件,理解起來就 簡單了。
>>
> 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...