demo.sol(delete,删除):
pragma solidity ^0.4.21;
contract deleteTest {
string public str1 = "hello";
// delete操作符可以用于任何变量(mapping除外),将其设置成默认值。
function delStr() public{
delete str1;
}
function setStr() public {
str1 = "HELLO";
}
///
// 静态数组(定长,不可修改),动态数组(不定长)。
uint[10] public staticArray = [4,2,4,5,6,7,8];
uint[] public dynamicArray = new uint[](10);
function intDynamicArray () public { // 初始化动态数组的值。
for (uint i = 0; i< 10; i++) {
//dynamicArray[i] = i; // delete之后无法直接赋值(长度为0,下标越界)
dynamicArray.push(i); // 可以动态添加10个元素
}
}
//如果对静态数组使用delete,则重置所有索引的值。
function delStaticArray() public {
delete staticArray;
}
//如果对动态数组使用delete,则删除所有元素,其长度变为0
function delDynamicArray() public {
delete dynamicArray;
}
function getArrayLength() view public returns (uint, uint){
return (staticArray.length, dynamicArray.length);
}
/
mapping(uint => bool) public map1;
function initMap() public {
map1[1] = true; // 删除该key后,会变成默认值false
map1[2] = true;
map1[3] = false;
// delete map1; // delete运算符不能作用于map类型。 可以作用于map的键。
}
function deleteMapByKey(uint key) public {
delete map1[key];
}
/
struct Person {
string name;
mapping(string => uint) nameScore; // 结构体中的map类型。
}
Person public p1;
function initP1() public {
p1.name = "duke";
p1.nameScore["duke"] = 80;
}
function returnP1() view public returns (string, uint) {
return (p1.name, p1.nameScore["duke"]);
}
function deleteP1() public {
delete p1; // 会删除结构体中的string,但不会删除结构体中的map
}
}