Solidity

我可以過濾一組結構嗎?

  • August 25, 2018

我想要一種儲存結構數組的方法。然後我希望能夠過濾這個數組並挑選出一個項目子集,其中某個結構參數命名foo == bar為例如。

這在堅固性中可能嗎?我的原始數組的大小和返回項目的數量是否有任何限制?

最後,因為這只會從分類帳中讀取,所以它不應該花費任何氣體來執行正確的嗎?

謝謝你。

據我了解,以下是可能的,

我的原始數組的大小是否有任何限制

合約儲存的限制也是對此的限制 - 即 2^261 字節。您可以參考這個問題來了解合約儲存限制。

退回的物品數量?

有兩個限制;什麼solidity允許從一個在這裡有很好的閱讀的函式返回,你的客戶端機器用來連接到乙太坊網路的東西可以在它的記憶體中處理。

因為這只會從分類帳中讀取,所以它不應該花費任何氣體來正確執行

這取決於您的要求。如果您想要的只是在不涉及交易的情況下閱讀(在本地顯示左右),則不會花費汽油。但是,儘管該函式是常量,但如果您需要在事務中使用它(假設您呼叫非常量函式並在該函式中使用此常量函式來驗證某些內容),這仍然可能需要花費 gas。可以在這個問題中找到有關此的好讀物。

程式碼看起來與此類似,具體取決於您的要求,它可能會改變

MyStruct[] myStructArray;

function checkArray() constant returns(bool[]){ // change on what you need to return

   bool[] checker; // change on what you need to return

   for(uint i = 0; i<myStructArray.length; i++){
       if(myStructArray[i].foo == bar){
           checker[i]=true; //or whatever you want to do if it matches
       }
       else{
           checker[i]=false;
       }
   }
   return checker;
}

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