Solidity

如果通過在結構中使用數組完成相同的工作,為什麼需要映射?

  • March 14, 2020

我混淆了結構的映射使用。這個智能合約我使用數組而不是映射

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) 時間內訪問元素的地方,不想執行迭代或循環的地方應該使用查找元素等映射。

我希望它有所幫助。

參考:

數組

映射類型

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