文章
问答
讲堂
百科图谱
线下集训
更多
提问
发表文章
专栏
活动
文档
工作
集市
发现
Toggle navigation
文章
问答
讲堂
线下集训
专栏
活动
工作
文档
集市
搜索
登录/注册
5
关于精通以太坊智能合约开发课程中的映射问题。
回答问题即可获得
5
贡献值,回答被采纳后即可获得
9
学分。
![image.png](https://img.learnblockchain.cn/attachments/2020/10/ylEJrLUB5f978a7073c03.png) 这是千聊课程中映射这一节,我的代码和tiny 熊一样,但是老是提示错误,由于刚入门,所以搞不懂哪里出了问题,过来请教一下。希望能有人指点一下,万分感谢。
这是千聊课程中映射这一节,我的代码和tiny 熊一样,但是老是提示错误,由于刚入门,所以搞不懂哪里出了问题,过来请教一下。希望能有人指点一下,万分感谢。
0 条评论
分类:
以太坊
请先
登录
后评论
默认排序
时间排序
2 个回答
Tiny熊
2020-10-27 14:38
擅长:智能合约,以太坊
iterable_mapping.sol 代码贴出来看下。 提示了类型不对,应该是 15 行。
请先
登录
后评论
Rocky
2020-10-30 19:54
``` library IterableMapping { struct itmap { mapping(uint => IndexValue) data; KeyFlag[] keys; uint size; } struct IndexValue { uint keyIndex; uint value; } struct KeyFlag { uint key; bool deleted; } function insert(itmap storage self, uint key, uint value) returns (bool replaced) { uint keyIndex = self.data[key].keyIndex; self.data[key].value = value; if (keyIndex > 0) return true; else { keyIndex = self.keys.length++; self.data[key].keyIndex = keyIndex + 1; self.keys[keyIndex].key = key; self.size++; return false; } } function remove(itmap storage self, uint key) returns (bool success) { uint keyIndex = self.data[key].keyIndex; if (keyIndex == 0) return false; delete self.data[key]; self.keys[keyIndex - 1].deleted = true; self.size --; } function contains(itmap storage self, uint key) returns (bool) { return self.data[key].keyIndex > 0; } function iterate_start(itmap storage self) returns (uint keyIndex) { return iterate_next(self, uint(-1)); } function iterate_valid(itmap storage self, uint keyIndex) returns (bool) { return keyIndex < self.keys.length; } function iterate_next(itmap storage self, uint keyIndex) returns (uint r_keyIndex) { keyIndex++; while (keyIndex < self.keys.length && self.keys[keyIndex].deleted) keyIndex++; return keyIndex; } function iterate_get(itmap storage self, uint keyIndex) returns (uint key, uint value) { key = self.keys[keyIndex].key; value = self.data[key].value; } } // How to use it: contract User { // Just a struct holding our data. IterableMapping.itmap data; // Insert something function insert(uint k, uint v) returns (uint size) { // Actually calls itmap_impl.insert, auto-supplying the first parameter for us. IterableMapping.insert(data, k, v); // We can still access members of the struct - but we should take care not to mess with them. return data.size; } // Computes the sum of all stored data. function sum() returns (uint s) { for (var i = IterableMapping.iterate_start(data); IterableMapping.iterate_valid(data, i); i = IterableMapping.iterate_next(data, i)) { var (key, value) = IterableMapping.iterate_get(data, i); s += value; } } } ```
请先
登录
后评论
您需要登录后才可以回答问题,
登录
关注
2
关注
收藏
0
收藏,
2811
浏览
Rocky
提出于 2020-10-27 10:49
×
发送私信
请将文档链接发给晓娜,我们会尽快安排上架,感谢您的推荐!
发给:
内容:
×
举报此文章
垃圾广告信息:
广告、推广、测试等内容
违规内容:
色情、暴力、血腥、敏感信息等内容
不友善内容:
人身攻击、挑衅辱骂、恶意行为
其他原因:
请补充说明
举报原因: