Arrays

是否可以創建鍵是現有數組的映射?

  • March 9, 2021

我正在嘗試使用這種結構創建映射:

mapping(string => House) public houses;

其中 House 是一個結構:

   struct House {
   address payable owner;
   uint256 base_price;
}

我已經有一個數組,可以在其中儲存我想要的所有字元串在我的映射鍵中,讓我們說這樣的話:

string[] public cities = ["New York", "Las Vegas", "London", "Paris", "Moscow"];

唯一的例外是我的數組更長(250個元素),我想知道是否可以創建映射而不使用像javascript中的map函式那樣循環遍歷數組,給所有初始元素相同開始結構。

目前我正在這樣做:

   for (uint i=0; i<cities.length; i++) {
       houses[cities[i]] = House(payable(0), 0.0005 ether, "");
   }

有沒有更有效的方法來做到這一點?先感謝您。

mapfrom JavaScript實際上是迭代到幕後的所有元素並應用您定義的轉換,因此它相當於在Solidity ( , for)while中創建一個手動循環。

至於您的具體情況,也許您不一定需要分配預設值。任何沒有初始分配的地址都已經是address(0). 另一方面,auint預設為 0。因此,每當您訪問 struct 中的任何數據時House,您都可以檢查價格值是否為 0,如果是,您可以當時分配 0.0005 ether 或直接使用新的價值。

總而言之,您可以base_price按照您在契約執行過程中看到的分配價格,而不是一開始就為所有城市分配預設價格(並且消耗大量汽油)。

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