注意点:
- solidity不支持删除中间元素,如果需要删除,将最后一个元素赋值给要删除的那个元素的下标,最后删除最后一个元素。如果按照传统的方式删除中间元素,然后将后面的前移,这就需要花费很多的gas。
- 循环数组的时候,一定要注意数组的长度,如果过长,那么操作的时候gas可能会超过当前区块的gas限制,导致任何人都无法执行这段代码。
删除的事例代码:
function remove(uint index) public {
uint len = numbers.length;
if (i == len - 1) {
numbers.pop();
break;
} else {
numbers[index] = numbers[len - 1];
epoches.pop();
break;
}
T[k] : 元素类型为T,固定⻓度为k的数组
T[] : 元素类型为T,⻓度动态调整
数组通过下标进行访问,序号是从0开始
bytes、string 是一种特殊的数组
bytes是动态分配大小字节的数组,类似于byte[],但是bytes的gas费用更低,bytes和string 都可以用来表达字符串,对任意⻓度的原始字节数据使用bytes,对任意⻓度字符串 (UTF-8)数据使用string。
pop 表示删除最后一个元素
push(x)表示在末尾增加元素 x。
lengh 属性表示数组的长度。
在 Solidity 中,只有 storage 类型有动态数组。memory 类型的数组必须有固定长度,并且不允许使用push()
来附加元素。
我们以 Solidity 库形式为动态值数组提供代码,我们能提供push()
(和pop()
)同时用于 storage 和 memory 数组。