web-dev-qa-db-fra.com

Comment retourner une liste de mappage dans Solidity? (Contrat Ethereum)

Je veux faire un contrat intelligent simple qui a une liste, peut définir un élément et peut obtenir la liste.

Code en solidité: 

contract lister {
    mapping(int => string) list;
    int id = 0;

    function getList() returns ( /*HERE*/ ) {
        return list;
    }

    function setItemToList(string str) {
        list[id] = str;
        id++;
    }
}

Je veux que getList () renvoie la liste, mais le type de retour n'est pas compatible . Comment puis-je faire cela?

15
6londe

L'accès en bloc aux listes/tableaux/etc est pénible dans Solidity. Vous le voyez rarement dans les contrats. Dans votre cas, une solution possible consiste à fournir une fonction permettant d’accéder à un élément one à l’aide de son index et de laisser l’appelant passer de 0 à id. 

15
bortzmeyer

Avec les mappages, les clés ne sont pas stockées et les valeurs ne peuvent pas être itérées. Elles ne sont donc utiles que pour les recherches à valeur unique. Dans l'exemple que vous donnez, il peut être préférable d'utiliser un tableau.

D'autre part, si vous utilisez un tableau et que vous devez effectuer une recherche sur celui-ci (parcourez tous les éléments), vous devez faire attention, car s'il y a trop d'éléments dans votre tableau, il peut en résulter des coûts considérables. gaz pour appeler la fonction.

1
Alex