【问题标题】:Row And Column Major Solidity行和列 Major Solidity
【发布时间】:2022-11-27 19:48:48
【问题描述】:

我很想知道对于 Solidity 中的多维数组,数据是以行优先顺序还是列优先顺序存储的。

先感谢您

【问题讨论】:

    标签: multidimensional-array ethereum solidity


    【解决方案1】:

    一般在行优先命令。这对memorycalldata 位置中的所有数组以及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);
        }
    }
    

    存储调试:

    固定大小的数组:

    动态大小数组:

    • 第一个值是顶部数组的大小 (== 2)
    • 第二个值是第一个嵌套数组的大小 (== 2)
    • 后跟第一个嵌套数组的值
    • 然后是第二个嵌套数组的大小 (== 2)
    • 最后是第二个嵌套数组的值

    【讨论】:

      猜你喜欢
      • 2020-12-18
      • 2019-02-26
      • 2012-09-15
      • 1970-01-01
      • 2018-09-05
      • 2021-11-10
      • 1970-01-01
      • 1970-01-01
      • 2022-01-17
      相关资源
      最近更新 更多