How to return mapping list in Solidity? (Ethereum contract)

19,123

Solution 1

Bulk access to lists/arrays/etc is painful in Solidity. You rarely see it in contracts. In your case, a possible solution is to provide a function to access one item, using its index, and to let the caller loop from 0 to id.

Solution 2

With mappings, keys are not stored and the values can not be iterated upon, so they are really only good for single-value lookups. In the example you provide, it may be a better choice to use an array.

On the other hand, if you use an array and need to do a search on it (loop through all items), you need to be careful because if there are too many items in your array, it could end up costing a considerable amount of gas to call the function.

Solution 3

You can change the visibility of your variable list, insert public and it will possible to access this by getList.

mapping(int => string) public list;

Share:
19,123
6londe
Author by

6londe

Software Engineer

Updated on June 07, 2022

Comments

  • 6londe
    6londe almost 2 years

    I want to make a simple smart contract that has a list, can set item, and can get the list.

    Code in solidity:

    contract lister {
        mapping(int => string) list;
        int id = 0;
        
        function getList() returns ( /*HERE*/ ) {
            return list;
        }
    
        function setItemToList(string str) {
            list[id] = str;
            id++;
        }
    }
    

    I want to make getList() return the list, but the return type is not compatible. How can I do that?