solidity 内存(memory) 可变数组的增删改查 操作

2023-02-23,,

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.9; library Array {
function push(uint256[] memory _nums, uint256 _num) internal pure {
assembly {
mstore(add(_nums, mul(add(mload(_nums), 1), 0x20)), _num)
mstore(_nums, add(mload(_nums), 1))
// 0x40 是空闲内存指针的预定义位置 (value 为 空闲指针开始位)
mstore(0x40, add(mload(0x40), 0x20))
}
} function pop(uint256[] memory _nums) internal pure returns (uint256 num_) {
assembly {
num_ := mload(add(_nums, mul(mload(_nums), 0x20)))
mstore(_nums, sub(mload(_nums), 1))
}
} function del(uint256[] memory _nums, uint256 _index) internal pure {
assembly {
if lt(_index, mload(_nums)) {
mstore(
add(_nums, mul(add(_index, 1), 0x20)),
mload(add(_nums, mul(mload(_nums), 0x20)))
)
mstore(_nums, sub(mload(_nums), 1))
}
}
} function update(
uint256[] memory _nums,
uint256 _index,
uint256 _num
) internal pure {
_nums[_index] = _num;
} function get(uint256[] memory _nums, uint256 _index)
internal
pure
returns (uint256)
{
return _nums[_index];
}
} contract testArr {
using Array for uint256[]; function push(uint256[] memory _nums, uint256 num)
external
pure
returns (uint256[] memory)
{
_nums.push(num);
return _nums;
} function pop(uint256[] memory _nums)
external
pure
returns (uint256[] memory, uint256)
{
uint256 num_ = _nums.pop();
return (_nums, num_);
} function del(uint256[] memory _nums, uint256 _index)
external
pure
returns (uint256[] memory)
{
_nums.del(_index);
return _nums;
} function update(
uint256[] memory _nums,
uint256 _index,
uint256 _num
) external pure returns (uint256[] memory) {
_nums.update(_index, _num);
return _nums;
} function get(uint256[] memory _nums, uint256 _index)
external
pure
returns (uint256)
{
return _nums.get(_index);
}
}

solidity 内存(memory) 可变数组增删改查 操作的相关教程结束。

《solidity 内存(memory) 可变数组的增删改查 操作.doc》

下载本文的Word格式文档,以方便收藏与打印。