智能合約開發實戰(11) - Mapping

閱讀時間約 1 分鐘
此篇我們也來介紹另外一個也是蠻常用又蠻重要的Mapping,它和陣列有點像,但比較不同的是:它不能用迴圈的方式取出裡面所有的資料,但陣列可以,Mapping比較像是一個查詢系統,用key值可以取出裡面的value值。
常見的表達式:mapping( key => value)
直接看程式碼:
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.11;
contract Mapping {
  event LOG(address, uint);
  mapping(address => uint) public myMap; //宣告一個mapping,名叫:myMap
  address[] public myMappingAddr; //因為mapping沒辦法使用迴圈,所以用一個陣列來記錄
  //設定mapping
  function setMapping(address _myAddr, uint _number) public {
    myMap[_myAddr] = _number;
    myMappingAddr.push(_myAddr);
  }
  //取得mapping(傳入地址,回傳值)
  function getMapping(address _myAddr) public view returns (uint) {
    return myMap[_myAddr];
  }
  //刪除mapping(和陣列一樣,只刪除內容(歸零),不會刪除key)
  function deleteMapping(address _myAddr) public {
    delete myMap[_myAddr];
  }
  //總計
  function getTotal() public view returns (uint) {
    require(myMappingAddr.length > 0, "The mapping has no values!"); //驗證mapping的長度是否為零
    
    //利用陣列取出mapping內所有的值做加總
    uint sum = 0;
    for (uint i = 0; i < myMappingAddr.length; i++){
      address key = myMappingAddr[i];
      uint value = myMap[key];
      sum += value;
    }
    
    return sum; //回傳
  }
  //寫一個test,測試自己的function是否正確
  function test() public {
    //模擬設定了兩個地址和參數
    setMapping(0x5B38Da6a701c568545dCfcB03FcB875f56beddC4, 10);
    setMapping(0x785aBdDd01bBeCA2D0a68b3461F0779eDc3A7A15, 20);
    uint sum = getTotal();//取得總計
    assert(sum == 30); //最後的驗證
  }
}
其實從程式碼就很容易看出,mapping和array其實還蠻相似的,兩個都像容器一樣可以用來存放,但只差在array可以跑迴圈但mapping不行,而mapping可以用key值做查詢取出value值而array沒有,所以mapping和array都還蠻常用的,但使用上有點不同,各位還是要先了解這兩個的使用方式,之後在寫程式時就知道在什麼場合應該用mapping或是array了,謝謝。
有什麼想要了解或是不清楚的部份,歡迎留言和我分享,謝謝。
如果喜歡我的文章歡迎追隨,按愛心,我每週都會上新文章。
為什麼會看到廣告
avatar-img
20會員
38內容數
目前加密貨幣的市場上幣種非常的多 讓你看得眼花撩亂了嗎? 可以藉由這一系列的加密貨幣分析 能夠幫忙您了解每一個加密貨幣它的價值所在 每一集都會介紹一種幣 是一個很實用的專題,歡迎大家訂閱~
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
宅D嘉的沙龍 的其他內容
這篇我們來看一個在程式開發很常見也很常用的一個東西:Array 陣列 Array在所有的程式開發中還蠻常見的,也一定會出現,因為有很多的資料都會是一長串的,需要有一個物件來去做集中管理。
由上篇看起來已經沒問題,我也一直用這樣的方式在上班看著幣價(噓~),後來發現了一點問題,我們看一下圖片: 加入Excel常用的函數:VLOOKUP VLOOKUP(搜尋準則, 範圍, 索引, 已排序)
在寫程式裡面,錯誤的檢查和處理是一定要有的,也是相對重要的,但Solidity裡面並沒有ErrorMessage這種東西,有的是Require()、Revert()、Assert()這三個函數,作用大概也跟ErrorMessage差不多,這裡介紹這三種函數的用法
我們知道function除了四種可見度 (visibility) 之外,還有三種比較常見的函式修飾詞(view、pure、payable),這篇就也來認識一下這三種函式修飾詞是做什麼用的吧。
事件(Event)在整個智能合約開發裡面是很常見也很常出現的應用,所以這篇我們就來說說Event到底該怎麼寫、怎麼應用。
繼承是智能合約開發很常見也很重要的一種方法,繼承主要是子合約可以從父合約中繼承所有的屬性和方法。 繼承寫法很簡單,就是在子合約後面加入"is"父合約的名稱就可以了
這篇我們來看一個在程式開發很常見也很常用的一個東西:Array 陣列 Array在所有的程式開發中還蠻常見的,也一定會出現,因為有很多的資料都會是一長串的,需要有一個物件來去做集中管理。
由上篇看起來已經沒問題,我也一直用這樣的方式在上班看著幣價(噓~),後來發現了一點問題,我們看一下圖片: 加入Excel常用的函數:VLOOKUP VLOOKUP(搜尋準則, 範圍, 索引, 已排序)
在寫程式裡面,錯誤的檢查和處理是一定要有的,也是相對重要的,但Solidity裡面並沒有ErrorMessage這種東西,有的是Require()、Revert()、Assert()這三個函數,作用大概也跟ErrorMessage差不多,這裡介紹這三種函數的用法
我們知道function除了四種可見度 (visibility) 之外,還有三種比較常見的函式修飾詞(view、pure、payable),這篇就也來認識一下這三種函式修飾詞是做什麼用的吧。
事件(Event)在整個智能合約開發裡面是很常見也很常出現的應用,所以這篇我們就來說說Event到底該怎麼寫、怎麼應用。
繼承是智能合約開發很常見也很重要的一種方法,繼承主要是子合約可以從父合約中繼承所有的屬性和方法。 繼承寫法很簡單,就是在子合約後面加入"is"父合約的名稱就可以了
你可能也想看
Google News 追蹤
Thumbnail
本文中,我們深入探討了 Dart 中的 Map(映射)資料結構,學習了如何宣告、初始化、更新、刪除以及走訪 Map 中的鍵值對。Map 是一個非常靈活且強大的資料結構,適合用於各種需要快速查詢的場景。
Thumbnail
Array可以說是各種語言除了基本型別之外,最常用的資料型別與容器之一了。 Array 這種連續格子狀的資料結構,在Python要怎麼表達呢? 建立一個空的陣列 最簡單也最直接的寫法就是 array = [] # Python list [] 就對應到大家熟知的array 陣列型態的資料結
以前覺得程式隔行如隔山, 一直都鴨子聽雷進入自我懷疑回圈, 特別感謝Paul老師, 願意花大量時間鉅細靡遺的介紹, 像解釋文言文一般, 悉心的一字一句清晰的解釋成白話文給我們大家, 終於找到了火山登山口的感覺, 繼續加油 🌳 1. mapping(address account => uint2
Thumbnail
這篇文章,會帶著大家複習以前學過的遞回框架, 並且鏈結串列的概念與應用為核心, 貫穿一些相關聯的題目,透過框架複現來幫助讀者理解這個演算法框架。 遞回框架 尋找共通模式(common pattern),對應到演算法的General case 確立初始條件(initial conditio
Thumbnail
■什麼是區塊鏈技術? 區塊鏈是透過點對點(P2P)運行的網路,這個網路由分散式節點組成,可以把它想成是共享的數據庫,也就是分散式帳本(DLT),分散式帳本技術是一種去中心化的帳本,儲存著網路上進行的所有交易。 中心化帳本:也稱為集中式帳本,由一個中心化的機構去做驗證、記帳、訂立規則。
今天要來嘗試的是,如何不用好用的Array.map 方法,來實現 Array.map 的功能。 What is Array.map map() 方法會建立一個新的陣列,其內容為原陣列的每一個元素經由回呼函式運算後所回傳的結果之集合。 簡單來說就是把陣列內的每一個值,個別跑函式,把新的值回傳出成
Thumbnail
題目敘述 題目會給定我們兩個整數陣列作為輸入nums1, nums2,要求我們找出兩個陣列的差異值。 找出在nums1但是不在nums2的元素,以陣列的形式放在answer[0]輸出。 找出在nums2但是不在nums1的元素,以陣列的形式放在answer[1]輸出。 題目的原文敘述
Thumbnail
本文介紹了串列運算式的應用,以及與Lambda匿名函式方法的比較,並提供了程式範例。串列運算式提供了一種簡潔的語法,用於創建、轉換和過濾列表。lambda函式用於創建匿名函式,通常用於簡單的操作。建議在比較複雜的情況下使用一般for迴圈加if來表示。
Thumbnail
區塊鏈原理 什麼是區塊鏈? 區塊鏈(Blockchain)是一種分散式帳本技術,它基於加密學和分散式計算的原理,通過將數據以區塊的形式連接在一起,形成鏈條。每個區塊包含一定時間內的多筆交易記錄,並使用密碼學哈希函數與前一個區塊相連,這種連接保證了數據的不可篡改性。 2. 區塊鏈的基本結構 2
Thumbnail
本文中,我們深入探討了 Dart 中的 Map(映射)資料結構,學習了如何宣告、初始化、更新、刪除以及走訪 Map 中的鍵值對。Map 是一個非常靈活且強大的資料結構,適合用於各種需要快速查詢的場景。
Thumbnail
Array可以說是各種語言除了基本型別之外,最常用的資料型別與容器之一了。 Array 這種連續格子狀的資料結構,在Python要怎麼表達呢? 建立一個空的陣列 最簡單也最直接的寫法就是 array = [] # Python list [] 就對應到大家熟知的array 陣列型態的資料結
以前覺得程式隔行如隔山, 一直都鴨子聽雷進入自我懷疑回圈, 特別感謝Paul老師, 願意花大量時間鉅細靡遺的介紹, 像解釋文言文一般, 悉心的一字一句清晰的解釋成白話文給我們大家, 終於找到了火山登山口的感覺, 繼續加油 🌳 1. mapping(address account => uint2
Thumbnail
這篇文章,會帶著大家複習以前學過的遞回框架, 並且鏈結串列的概念與應用為核心, 貫穿一些相關聯的題目,透過框架複現來幫助讀者理解這個演算法框架。 遞回框架 尋找共通模式(common pattern),對應到演算法的General case 確立初始條件(initial conditio
Thumbnail
■什麼是區塊鏈技術? 區塊鏈是透過點對點(P2P)運行的網路,這個網路由分散式節點組成,可以把它想成是共享的數據庫,也就是分散式帳本(DLT),分散式帳本技術是一種去中心化的帳本,儲存著網路上進行的所有交易。 中心化帳本:也稱為集中式帳本,由一個中心化的機構去做驗證、記帳、訂立規則。
今天要來嘗試的是,如何不用好用的Array.map 方法,來實現 Array.map 的功能。 What is Array.map map() 方法會建立一個新的陣列,其內容為原陣列的每一個元素經由回呼函式運算後所回傳的結果之集合。 簡單來說就是把陣列內的每一個值,個別跑函式,把新的值回傳出成
Thumbnail
題目敘述 題目會給定我們兩個整數陣列作為輸入nums1, nums2,要求我們找出兩個陣列的差異值。 找出在nums1但是不在nums2的元素,以陣列的形式放在answer[0]輸出。 找出在nums2但是不在nums1的元素,以陣列的形式放在answer[1]輸出。 題目的原文敘述
Thumbnail
本文介紹了串列運算式的應用,以及與Lambda匿名函式方法的比較,並提供了程式範例。串列運算式提供了一種簡潔的語法,用於創建、轉換和過濾列表。lambda函式用於創建匿名函式,通常用於簡單的操作。建議在比較複雜的情況下使用一般for迴圈加if來表示。
Thumbnail
區塊鏈原理 什麼是區塊鏈? 區塊鏈(Blockchain)是一種分散式帳本技術,它基於加密學和分散式計算的原理,通過將數據以區塊的形式連接在一起,形成鏈條。每個區塊包含一定時間內的多筆交易記錄,並使用密碼學哈希函數與前一個區塊相連,這種連接保證了數據的不可篡改性。 2. 區塊鏈的基本結構 2