Solidity
將數組映射為鍵或值數據類型
是否可以使用數組作為鍵/值進行映射?每個值都存在一個數組?
我實際上希望將結構儲存在映射中,但似乎無法正常工作。
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; } }