Solidity中的HashSet数据结构
HashSet data structure in Solidity
是否有任何方法可以在 Solidity 中实现一个集合,以检查一个元素是否存在,平均 O(1)?我一直在考虑使用没有值的映射对象,这是否比使用数组并迭代以查找元素更快?
是的,就速度而言,您最好使用映射。对我们来说,最接近集合的东西是映射和数组。但是当你想删除一个元素时,迭代的成本非常高。
映射示例
mapping (address => bool) yourMapping; // maps address (key) to boolean (value)
设置示例
contract Contract {
struct Set {
uint[] values;
mapping (uint => bool) is_in;
}
Set my_set;
function add(uint a) public {
if (!my_set.is_in[a]) {
my_set.values.push(a);
my_set.is_in[a] = true;
}
}
}
是否有任何方法可以在 Solidity 中实现一个集合,以检查一个元素是否存在,平均 O(1)?我一直在考虑使用没有值的映射对象,这是否比使用数组并迭代以查找元素更快?
是的,就速度而言,您最好使用映射。对我们来说,最接近集合的东西是映射和数组。但是当你想删除一个元素时,迭代的成本非常高。
映射示例
mapping (address => bool) yourMapping; // maps address (key) to boolean (value)
设置示例
contract Contract {
struct Set {
uint[] values;
mapping (uint => bool) is_in;
}
Set my_set;
function add(uint a) public {
if (!my_set.is_in[a]) {
my_set.values.push(a);
my_set.is_in[a] = true;
}
}
}