Solidity

將數組映射為鍵或值數據類型

  • February 9, 2022

是否可以使用數組作為鍵/值進行映射?每個值都存在一個數組?

我實際上希望將結構儲存在映射中,但似乎無法正常工作。

Struct Foo{
uint x
}

mapping(uint => Foo[])foo;甚至只是 mapping([] => uint)foo/(uint => [])foo;似乎不起作用。

我可以做的事情:

foo.1.push(FooInstance)

foo.1[0] = FooInstance

Solidity Doc 讀取

映射類型聲明為映射_KeyType => _ValueType,其中_KeyType 幾乎可以是除映射之外的任何類型,_ValueType 實際上可以是任何類型,包括映射。

那麼數組不被認為是一種數據類型嗎?

映射只能使用elementary類型(address, uint, bytes, string)作為鍵,更具體地說,可以使用為其sha3()定義的任何類型。這意味著目前不能將結構和數組用作鍵。

mapping(uint => Foo[]) foo;應該工作,對我有用。您的程式碼有一些語法錯誤,這可能是問題所在(struct不應大寫,uint x需要分號)

[]不是類型,你需要一些基本類型在它前面,比如uint[].

數組中的元素使用括號表示法訪問,而不是點表示法。

該契約應該有效:

contract Bar{

   struct Foo{
       uint x;
   }
   mapping(uint => Foo[]) foo;

   function add(uint id, uint _x) public {
       foo[id].push(Foo(_x));
   }

   function get(uint id, uint index) public returns(uint){
       return foo[id][index].x;
   }
}

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