Dapp-Development
如何在 Solidity 中創建可迭代的 key->value 結構?
我正在嘗試為使用者創建一個框架來提供通用商品進行銷售。例如,一個通用商品(一個 Gizmo)可能有 14 個人以不同的價格在世界不同地區銷售。為了實現這一點,我需要管理一個價格列表,保存在儲存中,可以由 web3.js 驅動的前端查詢。
最好是映射之類的東西:
uint productId; // Set automatically for each product uint memberId; // Set automatically at join uint price; // Prices are in US cents /* (productId => (memberId => price)) */ mapping (uint => mapping (uint => uint)) priceLedgers; /* Pseudo-JavaScript below */ for (var i=0, i < priceLedgers[productId].length, i++) { // List of members with their prices here. }
也許另一種解釋我正在嘗試做的事情的方法是使用 Python。
priceOffers = {} priceOffers[1] = 234 priceOffers[45] = 99392 priceOffers[23] = 111 >>> priceOffers {1: 234, 45: 99392, 23: 111} >>> for key, value in priceOffers.iteritems(): print(key, value) (1, 234) (45,99392) (23, 111) productId = 34 priceLedgers = {} priceLedgers[34] = priceOffers
這在 Solidity 中可能嗎?
您可以將映射的索引儲存在數組中。
uint[] indexes; mapping (uint => uint) example; function add(uint x){ example[indexes.length] = x; indexes.push(indexes.length); }
然後只需遍歷數組索引作為鍵。
如果你想要自定義無序鍵,它是一樣的。您只需要在 add 函式中傳遞密鑰
function add(uint data,uint index){ example[index] = data; indexes.push(index); }
這是這種結構的實現: https ://github.com/chriseth/solidity-examples/blob/master/iterable_mapping.sol