Solidity中很多方法都很底层,比如开发中很常见的迭代和判断字符串相等的方法都没有,必须要自己写个方法来实现。可能已有些库已实现类似的方法,不过总归是要麻烦不少。相比起来,JavaScript自己就带了很多原生的方法,用起来也很顺手。
判读字符串相等不能直接使用==这样的方法,我也搞不清为什么,很多语言都是直接支持的,只有Solidity不支持。没办法,只能自己设计个方法来实现。
function compareStr (string _str1, string _str2) public returns(bool) { if(keccak256(abi.encodePacked(_str1)) == keccak256(abi.encodePacked(_str2))) { // 如果二者相等,使checkResult为true checkResult = true; }else { checkResult = false; } // 返回checkResult return checkResult; }
对两个字符串进行哈希运算,结果一致就证明两个字符串相等。这个哈希运算有点费时,可以在这之前做个长度判断以节约点时间,达到一个平衡。改进后的方法:
function compareStr (string _str1, string _str2) public returns(bool) { if(bytes(_str1).length == bytes(_str2).length){ if(keccak256(abi.encodePacked(_str1)) == keccak256(abi.encodePacked(_str2))) { retrun true; } } return false; }
如果是频繁地运用这个方法,或者是对很多的字符串组进行比较,则改进后的方法会优良不少。
本文链接地址:https://www.wwsww.cn/jishu/6528.html
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。