1. 程式人生 > >Solidity中如何判斷mapping中某個鍵是否為空呢?

Solidity中如何判斷mapping中某個鍵是否為空呢?

Solidity中如何判斷mapping中某個鍵是否為空呢?

一.比較標準的做法是建立一個專門和value相關的結構體,用一個布林型變數來看是否這個key所對應的value被賦過值

程式碼如下:

pragma solidity ^0.4.19;

contract UserTest {
    
    struct User{
      string name;
      bool isVaild;
    }
    
    mapping(address => User) public users;
    
    function addUser(string _name) public returns (string) {
        
if(users[msg.sender].isVaild){ return users[msg.sender].name; } users[msg.sender].name = _name; users[msg.sender].isVaild = true; return users[msg.sender].name; } function deleteUser() public returns (bool) { if(users[msg.sender].isVaild){ users[msg.sender].name
= ''; users[msg.sender].isVaild = false; return true; } return false; } function getUser() public constant returns (string, bool) { return (users[msg.sender].name, users[msg.sender].isVaild); } }

 

二.也可以簡單的來看一下value所對應的length來判斷這個值是否被賦值過(零值無法判斷!)【實際上我在測試過程中這種方式一直報編譯錯誤】

mapping(address => uint) public deposits;
if(deposits[msg.sender].length == 0){
    // deposit[msg.sender] is empty, do your thing
}

  如果我們不用判斷某個變數是否為賦過值後的零值時,我建議用第二種通過length來判斷的方法,因為後者將大大減少合約gas的消耗。但實際上我在測試過程中這種方式一直報編譯錯誤

 

參考文章:https://ohyoukillkenny.github.io/blog/2018/01/07/null-in-solidity/