Arrays
是否可以創建鍵是現有數組的映射?
我正在嘗試使用這種結構創建映射:
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, ""); }
有沒有更有效的方法來做到這一點?先感謝您。
map
from JavaScript實際上是迭代到幕後的所有元素並應用您定義的轉換,因此它相當於在Solidity ( ,for
)while
中創建一個手動循環。至於您的具體情況,也許您不一定需要分配預設值。任何沒有初始分配的地址都已經是
address(0)
. 另一方面,auint
預設為 0。因此,每當您訪問 struct 中的任何數據時House
,您都可以檢查價格值是否為 0,如果是,您可以當時分配 0.0005 ether 或直接使用新的價值。總而言之,您可以
base_price
按照您在契約執行過程中看到的分配價格,而不是一開始就為所有城市分配預設價格(並且消耗大量汽油)。