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

2023/05/28閱讀時間約 2 分鐘
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」歡迎自行取用。
喜歡撰寫文章的你,不妨來了解一下:
歡迎加入一起練習寫作,賺取知識,累積財富!
為什麼會看到廣告
90會員
258內容數
哈囉,我是阿Han,是一位 👩‍💻 軟體研發工程師,喜歡閱讀、學習、撰寫文章及教學,擅長以圖代文,化繁為簡,除了幫助自己釐清思路之外,也希望藉由圖解的方式幫助大家共同學習,甚至手把手帶您設計出高品質的軟體產品。
留言0
查看全部
發表第一個留言支持創作者!