Solidity
如果通過在結構中使用數組完成相同的工作,為什麼需要映射?
我混淆了結構的映射使用。這個智能合約我使用數組而不是映射
pragma solidity ^0.6.*; contract MyContract{ //here we can not assume the length off array so need counter on couter we can fatch data from index (counter) Person[] public people; uint256 public peopleCount; struct Person{ string _firstname; string _lastname; } function addPerson(string memory _firstname,string memory _lastname) public{ people.push(Person(_firstname,_lastname)); peopleCount +=1; } }
在這個程序中,我使用了映射,兩者都給了我相同的結果。誰能告訴我有什麼區別。
如果您需要以下任何一項來執行
O(1)
操作:
- 通過不是序列號的唯一 ID 獲取項目(例如,地址)
- 移除項目
那麼數組是不合適的,你必須使用映射。
從 Solidity 閱讀文件:
大批:
- 數組可以具有編譯時固定大小,也可以具有動態大小。
- 指數從零開始。
要點:Solidity 還不支持異構數組,即數組的索引是整數而不是任何其他值。
映射:
- 映射類型使用語法映射*(_KeyType => _ValueType),映射類型的變數使用語法映射(_KeyType => _ValueType) _VariableName 聲明*。_KeyType可以是任何內置****值類型、字節、字元串或任何協定或列舉類型。
要點:需要 _keyType 為字節、字元串甚至整數的場景,可以使用映射。
儘管可以通過在結構中使用數組來完成相同的工作,但在需要整數以外的鍵的地方,希望在 O(1) 時間內訪問元素的地方,不想執行迭代或循環的地方應該使用查找元素等映射。
我希望它有所幫助。
參考: