Solidity

檢查數組所有元素的條件

  • May 26, 2022

我需要檢查數組 ( uint[]) 中的所有元素是否都在特定範圍內。

我想知道是否有更好的方法來做到這一點。這就是我現在想出的:

contract MyContract {

   /* ... */

   function pickNumbers(uint[5] memory _stdNumbers, uint memory _specialNumber) public {

       for(uint i=0; i<_stdNumbers.length; i++) {
           require(_stdNumbers[i] > 0 && _stdNumbers[i] < 70, "Invalid standard number");
       }

       require(_specialNumber > 0 && _specialNumber < 27, "Invalid special number");

       // DO SOMETHING

   }
}

提前致謝。

就是這樣。你可以節省一些氣體:

function pickNumbers(uint[5] memory _stdNumbers, uint memory _specialNumber) public {


   for(uint i=0; i<5;) {
       require(_stdNumbers[i] > 0 && _stdNumbers[i] < 70, "Invalid standard number");
       unchecked { i += 1 }
   }

   require(_specialNumber > 0 && _specialNumber < 27, "Invalid special number");

   // DO SOMETHING

}

或者如果它只有 5 個,最好只寫 5 個 require 語句

 require(_stdNumbers[0] > 0 && _stdNumbers[0] < 70, "Invalid standard number");
 require(_stdNumbers[1] > 0 && _stdNumbers[1] < 70, "Invalid standard number");
 ....

引用自:https://ethereum.stackexchange.com/questions/128951