solidity---判断mapping的key是否存在

问题触发

当mapping的value为结构体时,可以在结构体中加一个bool值的标志位用来判断,这是网上大多数的做法。但是当value为string时,如何判断mapping的key是否存在。很容易能想到用的string的length长度来判断,但是solidity的string类型没有length方法,因此我们要用到转换类型来判断。

问题解决

利用bytes()来转化string类型。以下是合约举例,供参考!

// SPDX-License-Identifier: GPL-3.0

pragma solidity >=0.7.0 <0.9.0;

/**
 * @title TestMapping
 */
contract TestMapping {

    mapping(string => string) weathers;
    
    function set (string memory str) public {
        weathers[str] = "true";
    }

    function get(string memory str) view public returns (string memory){
        if (bytes(weathers[str]).length == 0) {
            //you can do something
            return "false";
        }
        return weathers[str];
    }
}

你可能感兴趣的:(Solidity,mapping,solidity,智能合约)