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

Check that object is null in solidity mapping

我有这个实体映射

mapping (string => Ticket) public myMapping;

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

没有直接的方法来检查映射是否有特定的键。但是您可以检查映射 属性 是否有价值。下面的例子认为 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;
    }
}

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