{"content":{"title":"solidity -> delete","body":"delete\r\n ---\r\n- delete操作符可以用于任何变量（map除外），将其设置成默认值\r\n- 如果对动态数组使用delete，则删除所有元素，其长度变为0\r\n- 如果对静态数组使用delete，则重置所有索引的值，数组长度不变\r\n- 如果对map类型使用delete，什么都不会发生\r\n- 如果对map类型中的一个键使用delete，则会删除与该键相关的值\r\n\r\n\r\n```\r\n// SPDX-License-Identifier: SEE LICENSE IN LICENSE\r\npragma solidity ^0.8.9;\r\n\r\ncontract Delete {\r\n    // 01. string\r\n    string public str1 = \"hello\";\r\n\r\n    function deleteStr() public {\r\n        delete str1;\r\n    }\r\n\r\n    function setStr(string memory input) public {\r\n        str1 = input;\r\n    }\r\n\r\n    // 02. array 对于固定长度的数组，会删除每个元素的值，但是数组长度不变\r\n    uint256[10] public array1 = [1, 2, 3, 4, 5];\r\n\r\n    function deleteFiexedArray() public {\r\n        delete array1;\r\n    }\r\n\r\n    //03. array new\r\n    uint256[] array2;\r\n\r\n    function setArray2() public {\r\n        array2 = new uint256[](10);\r\n        for (uint256 i = 0; i < array2.length; i++) {\r\n            array2[i] = i;\r\n        }\r\n    }\r\n\r\n    function getArray2() public view returns (uint256[] memory) {\r\n        return array2;\r\n    }\r\n\r\n    function deleteArray2() public {\r\n        delete array2;\r\n    }\r\n\r\n    //04. mapping\r\n    mapping(uint256 => string) public m1;\r\n\r\n    function setMap() public {\r\n        m1[0] = \"hello\";\r\n        m1[1] = \"solidity\";\r\n    }\r\n\r\n    //Mapping不允许直接使用delete，但是可以对mapping的元素进行指定删除\r\n    function deleteMapping(uint256 i) public {\r\n        delete m1[i];\r\n    }\r\n}\r\n```"},"author":{"user":"https://learnblockchain.cn/people/5348","address":null},"history":null,"timestamp":1668166037,"version":1}