{"content":{"title":"Solidity 嵌套数组","body":"在实际应用中，嵌套数组很少被使用，但为了保持完整性，我们将其包含在此。\r\n\r\n嵌套数组，顾名思义，指的是包含在另一个数组中的数组。\r\n\r\n在这个例子中，该函数接收一个矩形的网格。\r\n\r\n```solidity\r\n\r\ncontract ExampleContract {\r\n\r\n    function containsAThree(uint256[][] calldata nestedArray)\r\n        public\r\n        pure\r\n        returns (bool) {\r\n            for (uint256 i = 0; i < nestedArray.length; i++) {\r\n                for (uint256 j = 0; j < nestedArray[i].length; j++) {\r\n                    if (nestedArray[i][j] == 3) {\r\n                        return true;\r\n                    }\r\n                }\r\n            }\r\n            return false;\r\n    }\r\n}\r\n\r\n```\r\n\r\n这是在 remix 中运行的情况。\r\n\r\n![https://static.wixstatic.com/media/c0c19a_b9ca99cdc4384a34b4ad9c56ae28e8b9~mv2.png/v1/fill/w_939,h_494,al_c,q_95,enc_auto/c0c19a_b9ca99cdc4384a34b4ad9c56ae28e8b9~mv2.png](https://img.learnblockchain.cn/2025/02/26/c0c19a_b9ca99cdc4384a34b4ad9c56ae28e8b9~mv2.png)\r\n\r\n你也可以从二维数组中获取一维数组。\r\n\r\n```solidity\r\n\r\ncontract ExampleContract {\r\n\r\n    // [[1,2],[3,4],[5,6]] 变成 [1,2]\r\n    function getRow(uint256[][] calldata nestedArray)\r\n        public\r\n        pure\r\n        returns(uint256[] memory) {\r\n            return nestedArray[0];\r\n    }\r\n}\r\n\r\n```\r\n\r\n要声明固定大小的数组，请使用以下语法。\r\n\r\n```solidity\r\n\r\ncontract ExampleContract {\r\n\r\n    // ACCEPTED: [[1,2],[3,4],[5,6]]\r\n    // REJECTED: [[1,2,3],[4,5,6]]\r\n    function fixedSize(uint256[2][3] calldata nestedArray)\r\n        public\r\n        pure\r\n        returns (uint256) {\r\n            return 0; // 仅仅为了编译\r\n    }\r\n}\r\n\r\n```\r\n\r\n可能让人困惑的是，当你访问数组中的特定元素时，顺序可能感觉与其他语言相反，但如果你仔细想想，这是有道理的。\r\n\r\n```solidity\r\n\r\ncontract ExampleContract {\r\n\r\n    // ACCEPTED: [[1,2],[3,4],[5,6]] -> 返回 6\r\n    function getLast(uint256[2][3] calldata nestedArray)\r\n        public\r\n        pure\r\n        returns (uint256) {\r\n            return nestedArray[2][1];\r\n\r\n            // nestedArray[2] -> [5,6] 然后获取第 1 个索引项 -> 6\r\n    }\r\n}\r\n\r\n```\r\n\r\n就像一维数组一样，如果你访问越界的区域，交易将会回退。\r\n\r\n请注意，嵌套数组在实际应用中非常罕见。如果你觉得可以跳过这一部分，请随意。\r\n\r\n**练习题**\r\n\r\n[NestedArray](https://github.com/RareSkills/Solidity-Exercises/tree/main/NestedArray)\r\n\r\n[TicTacToe](https://github.com/RareSkills/Solidity-Exercises/tree/main/TicTacToe)\r\n\r\n### 了解更多 \r\n\r\n请查看 [区块链培训营](https://learnblockchain.cn/openspace/1)，以了解更多关于智能合约开发和代币标准的内容。\r\n\r\n \r\n\r\n>- 原文链接： [rareskills.io/learn-soli...](https://www.rareskills.io/learn-solidity/nested-arrays)\r\n>- 登链社区 AI 助手，为大家转译优秀英文文章，如有翻译不通的地方，还请包涵～"},"author":{"user":"https://learnblockchain.cn/people/20722","address":null},"history":null,"timestamp":1740576760,"version":1}