我有一个映射表,它将多个哈希值存储到该表中。我想要做的是我希望用户使用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 :(得分:5)
没有"存在"在Solidity mapping
。
每个键映射到某个东西。如果尚未设置任何值,则该值为0.
对于您的用例,hashstructs[n].fhash > 0
可能就足够了。如果您想要明确,请在bool exists
添加struct
,并在添加内容时将其设置为true
。然后使用hashstructs[n].exists
检查是否存在。
答案 1 :(得分:0)
如果要检查映射中是否存在键,则可以检查字节长度。如果长度为零,则表示密钥不存在,否则映射中存在密钥。示例示例是:-
function checkUser(string memory user_id) public view returns(bool){
if(bytes(PassHash[user_id]).length>0){
return true;
}
else{
return false;
}
}