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?
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.
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.