Ethereum 如何知道映射表中是否存在特定值?

Ethereum 如何知道映射表中是否存在特定值?,ethereum,solidity,smartcontracts,Ethereum,Solidity,Smartcontracts,我有一个映射表,它将多个哈希存储到该表中。我想做的是,我希望用户使用setinstructors()函数添加另一个哈希,然后尝试查看映射表中是否已经存在相同的哈希。如果表中已经存在相同的哈希,那么它应该返回true-esle-false。这是我的密码: pragma solidity ^0.4.18; contract Hash{ bytes32 comphash; struct hashstruct{ bytes32 fhash; } mapping (uint => hashst

我有一个映射表,它将多个哈希存储到该表中。我想做的是,我希望用户使用setinstructors()函数添加另一个哈希,然后尝试查看映射表中是否已经存在相同的哈希。如果表中已经存在相同的哈希,那么它应该返回true-esle-false。这是我的密码:

pragma solidity ^0.4.18;

contract Hash{
bytes32 comphash;

struct hashstruct{
bytes32 fhash;

}
mapping (uint => hashstruct) hashstructs;
uint[] public hashAccts;



function setinstructor(uint _uint,string _fhash) public {
      var a = hashstructs[_uint];
   a.fhash = sha256(_fhash);  
     hashAccts.push(_uint) -1;


}



function getInstructor(uint ins) view public returns (bytes32) {
    return (hashstructs[ins].fhash);
}

   function count() view public returns (uint) {
    return hashAccts.length;
}



function setinstructors(string _comphash) public {
    comphash = sha256(_comphash);

}

function getInstructors() public constant returns (bytes32) {
    return (comphash);
}



}
在坚实的映射中没有“存在”这样的东西

每把钥匙都指向某个东西。如果尚未设置任何值,则该值为0


对于您的用例,
hashstructs[n].fhash>0
可能就足够了。如果您希望显式,请将
bool exists
添加到
struct
中,并在添加内容时将其设置为
true
。然后使用hashstructs[n].exists检查是否存在。

如果要检查映射中是否存在键,则可以检查字节长度。如果长度为零,则表示密钥不存在,否则映射中存在密钥。一个示例是:-


    function checkUser(string memory user_id) public view returns(bool){
        if(bytes(PassHash[user_id]).length>0){
            return true;
        }
        else{
            return false;
        }
    }