Solidity
使用結構讀取文章列表
我嘗試使用下面的程式碼閱讀文章列表
struct posts { bytes32 postTag; string post; address[] acceptedBy; uint8[] voteCount; } mapping(address => posts) totaluserPosts;
我試圖以不同的方式閱讀所有文章,但找不到方法。
是否可以通過一個請求閱讀所有文章?
簡短的回答是您必須創建一個函式,因為您通過
public
映射收到的“免費”吸氣劑不會這樣做。更好的答案是重新考慮批量數據轉儲的需要。如果每次將某些內容插入此結構時都發出事件,我通常就足夠了,這意味著軟體客戶端應該已經被告知此資訊。因此,為什麼要再次要求它,因為這樣做會消耗大量氣體並且不是特別快。對這種思想的更完整描述:https ://blog.b9lab.com/the-joy-of-minimalism-in-smart-contract-design-2303010c8b09
建議。命名約定:
struct PostStruct { bytes32 postTag; string post; address[] acceptedBy; uint8[] voteCount; } mapping(address => posts) postStructs;
自定義函式範例:
function getPostAddressCount(address post, uint row) public returns(uint count) { return postStructs[post].address.length; } function getPostAcceptedBy(address post) public returns(address[] acceptedBy) { return postStructs[post].acceptedBy; }
由於上述功能的成本隨著規模的增加而增加到無法使用的程度,因此最好包含一個固定成本的替代方案:
function getPostAcceptedByByRow(address post, uint row) public returns(address acceptedBy) { return postStructs[post].acceptedBy[row]; }
希望能幫助到你。