检查实体映射中的对象是否为空

Ana*_*hri 5 ethereum solidity

我有这个坚固性映射

mapping (string => Ticket) public myMapping;
Run Code Online (Sandbox Code Playgroud)

我想检查是否myMapping[key]存在。我该如何检查?

Div*_*Div 8

没有直接的方法来检查映射是否具有特定的键。但您可以检查映射属性是否有值。以下示例认为 是Ticket具有某些属性的结构。

pragma solidity >=0.4.21 <0.6.0;

contract Test {

    struct Ticket {
       uint seatNumber;
    }

    mapping (string => Ticket) myMapping;

    function isExists(string memory key) public view returns (bool) {

        if(myMapping[key].seatNumber != 0){
            return true;
        } 
        return false;
    }

    function add(string memory key, uint seatNumber) public returns (bool){            
        myMapping[key].seatNumber = seatNumber;            
        return true;
    }
}
Run Code Online (Sandbox Code Playgroud)


Die*_*o B 5

整个存储空间虚拟初始化为0(没有未定义)。因此,您必须将该值与您的类型的 0 值进行比较。例如,mapping[key] == address(0x0) 或 mapping[key] = bytes4(0x0)。