Array
contract Array {
// storage array 定义
// 注意区分后面的 memory array 定义
uint[] public numDynamic = [1]; // 动态长度
uint[3] public numFixed = [4]; // 定长, 不能越界, 无 push 和 pop 操作
function demo() external {
// 操作
numDynamic.push(4); // 末尾追加
numDynamic.pop(); // 末尾删除
// 数组长度, 定长数组一直返回定长长度
uint256 len = numDynamic.length;
uint256 v = num[0]; // 取值
num[0] = 123; // 修改
delete num[0]; // 删除(将该位置设置为 0, 后面数字不向前补位)
// memory array 定义
// 必须是定长(.length 一定), 没有 push, pop 操作, 默认全是 0
uint[] memory num = new uint[](5);
}
// 函数返回数组需要使用 memory 修饰, 将 state 复制到 memory 后返回
// 不推荐函数返回数组, 就像不推荐使用 loop 一样, 会随着长度增加消耗太多 gas, 导致函数不可用.
function foo() external returns (uint256[] memory) {}
function remove(uint _index) public {
require(_index < arr.length, "index out of upper bound");
//for (uint i = _index; i < arr.length - 1; i++) {
// arr[i] = arr[i+1];
//}
arr[_index] = arr[arr.length-1];
arr.pop();
}
}在 Remix 尝试一下?!
Last updated
Was this helpful?