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

时间:2019-12-22 22:01:18

标签: ethereum solidity

我有这种坚固性映射

mapping (string => Ticket) public myMapping;

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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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