问题触发
当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];
}
}