【发布时间】:2022-11-27 19:48:48
【问题描述】:
我很想知道对于 Solidity 中的多维数组,数据是以行优先顺序还是列优先顺序存储的。
先感谢您
【问题讨论】:
标签: multidimensional-array ethereum solidity
我很想知道对于 Solidity 中的多维数组,数据是以行优先顺序还是列优先顺序存储的。
先感谢您
【问题讨论】:
标签: multidimensional-array ethereum solidity
一般在行优先命令。这对memory 和calldata 位置中的所有数组以及storage 中的固定大小数组均有效。
一个例外:storage 中的动态大小数组可以使用其可变存储槽 ID 和索引的散列来访问。所以这些行可能不是结果。但是这些值仍然存储在行优先中。
文档:https://docs.soliditylang.org/en/latest/internals/layout_in_storage.html#mappings-and-dynamic-arrays
pragma solidity ^0.8;
contract MyContract {
uint[2][2] public fixedArray;
uint[][] public dynamicArray;
constructor() {
fixedArray[0][0] = 1;
fixedArray[0][1] = 2;
fixedArray[1][0] = 3;
fixedArray[1][1] = 4;
// workaround - cannot resize in-memory dynamic-size arrays
// so we declare a "dynamic array with predefined length" in memory
uint[] memory dynamicArrayNested1 = new uint[](2);
dynamicArrayNested1[0] = 5;
dynamicArrayNested1[1] = 6;
dynamicArray.push(dynamicArrayNested1);
uint[] memory dynamicArrayNested2 = new uint[](2);
dynamicArrayNested2[0] = 7;
dynamicArrayNested2[1] = 8;
dynamicArray.push(dynamicArrayNested2);
}
}
存储调试:
动态大小数组:
【讨论】: