Comment retourner la liste de mapping dans Solidity? (Ethereum contrat)
je veux faire simple contrat intelligent qui a une liste, peut définir l'é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 faire getlist () retourner la liste, mais le type de retour n'est pas compatible. Comment puis-je le faire?
3 réponses
L'accès en vrac aux listes/tableaux/etc est douloureux en solidité. On le voit rarement dans les contrats. Dans votre cas, une solution possible est de fournir une fonction d'accès à item, en utilisant son index, et de laisser l'appelant boucle de 0 à id.
avec les mappages, les clés ne sont pas stockées et les valeurs ne peuvent pas être itérées, de sorte qu'elles ne sont vraiment bonnes que pour les recherches à une seule valeur. Dans l'exemple, il peut être un meilleur choix d'utiliser un tableau.
d'un autre côté, si vous utilisez un tableau et avez besoin de faire une recherche dessus (boucle à travers tous les articles), vous devez être prudent parce que s'il y a trop d'articles dans votre tableau, il pourrait finir par coûter une quantité considérable de gaz pour appeler la fonction.
Vous pouvez changer la visibilité de votre variable liste, insérer public et il sera possible d'y accéder en getList.
mapping(int => string) public list;