solidityで2次元配列を1次元配列にして返却する
solidityは現状多次元配列を返却できない。stringの配列も2次元配列扱いだから返却できない。
どうにかして数値データだけでも一撃で取得できないものかと下記のコードを書いてみた。
データをuint256に限定とかすれば一応、一撃で取得できる?これ実用的なのかな。
まだよくわかっていないけれど、viewの関数はgasが一切かからないからこれはこれでいいかも知れない。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
pragma solidity ^0.4.18; contract returnTest { uint public catNum; mapping(uint=>uint[3]) public cat; function addCat() public{ cat[catNum][0] = catNum + 1000; cat[catNum][1] = catNum + 2000; cat[catNum][2] = catNum + 3000; catNum++; } function getAllCat() public view returns(uint[]) { uint[] memory store = new uint[](catNum*3); uint cnt = 0; for(uint i=0; i<catNum; i++){ store[cnt++] = cat[i][0]; store[cnt++] = cat[i][1]; store[cnt++] = cat[i][2]; } return store; } } |