Проверьте, что объект является нулем в картографировании солидности - PullRequest
2 голосов
/ 23 декабря 2019

У меня есть это отображение твердости

mapping (string => Ticket) public myMapping;

Я хочу проверить, существует ли myMapping[key] или нет. Как я могу проверить?

Ответы [ 2 ]

2 голосов
/ 24 декабря 2019

Все пространство памяти фактически инициализировано равным 0 (неопределенных нет). Таким образом, вы должны сравнить значение со значением 0 для вашего типа. Например, отображение [ключ] == адрес (0x0) или отображение [ключ] = байты4 (0x0).

1 голос
/ 23 декабря 2019

Нет прямого способа проверить, имеет ли отображение определенный ключ. Но вы можете проверить, имеет ли свойство отображения значение или нет. В следующем примере считается, что 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;
    }
}
...