阿Han
阿Han

文字是留下記錄的一種媒介,將知識吸收轉化後輸出成文字進行保存。 ☕️ https://liker.land/willhanchen/civic

【開發智能合約 — Solidity系列】實作篇Ep.15 — 映射的奧秘(Mapping)

一起動動手來玩玩智能合約吧

Mapping(映射)就像是字典表一樣,鍵入「什麼樣的標題」對應到「什麼樣的內容」,而標題就是從內容提煉出來的一種簡短快速識別的標的,透過這種方式,我們未來找尋內文時,只要先透過標題來查找,絕對會比直接找內文快上好幾倍,因此Mapping常常應用在查找事物上,它有點像一般程式語言的HashTable,主要目的在於透過對應表快速定位到詳細的資訊。

語法結構

圖片來源

/// 錢包餘額對應表

/// 錢包地址 <-剩餘-> 金額

mapping(address => uint) public _balances;

圖片來源

如何設定對應表?

圖片來源

function updateBalance(uint newBalance) public {

_balances[msg.sender] = newBalance;

}

取得特定值

取得的方式非常簡單,我們宣告一個正確型別的變數進行承接之後,就能夠使用到儲存的值,進行加工後,再次設定。

uint _balance = _balances[msg.sender];

刪除某一組

藉由delete關鍵字重新設定某一組key值。

delete _balances[msg.sender];

相關的限制

- 鍵值(Key)僅能是Solidity的基本型態(strings、uint…),複雜型態(array、struct…)是不被允許的。

- 預設不支援iterable,因此無法自然的逐一處理,但提供自行實作的擴充能力,請參考這裡

結語

Mapping是一種非常好用的資料結構,我們日常生活中諸如電話黃頁、書籤、五金行分類…等,舉凡與搜尋有關的整理,皆是在將龐雜的資訊濃縮成摘要,並且進行恰當的分類之後,讓我們更容易找尋這堆龐雜的資料,在區塊鏈的世界上亦是如此,錢包地址的背後可能夾藏的非常複雜的資訊,透過Mapping快速定位到關鍵位置,進行進一步的處理。

今天的範例都在這裡「📦 solidity-remix-toturial/Ep15」歡迎自行取用。

📚 更多關於Solidity的文章請看這裡…

----------------------------------------------------------------------------------

喜歡撰寫文章的你,不妨來了解一下:

Web3.0時代下為創作者、閱讀者打造的專屬共贏平台 — 為什麼要加入?

歡迎加入一起練習寫作,賺取知識,累積財富!

資源參考

- https://rickbsr.medium.com/淺談-hash-hashtable-與-hashmap-4e5f5e5d36da

- https://codeforgeek.com/mappings-inside-structs-in-solidity/

CC BY-NC-ND 2.0 版权声明

喜欢我的文章吗?
别忘了给点支持与赞赏,让我知道创作的路上有你陪伴。

加载中…
加载中…

发布评论