Disons que j'ai un dictionnaire Lua (soit une table Lua qui contient des index de type string) comme ceci:Est-il possible de faire un itérateur dans Lua qui peut parcourir un dictionnaire?
local my_dictionary = {a = 123; b = 321; c = 456; d = 654};
Ce que je suis en train de faire est de créer une fonction iterator qui peut itérer sur une table même si ses index sont de type chaîne; un peu comme des paires, cependant chaque fois que j'essaie d'appeler next() pour obtenir l'index suivant, la valeur retournera seulement l'index, la valeur si l'index est de type int. Une idée que j'ai eu était peut-être d'appeler (index): byte (1, -1) et d'additionner le tuple d'ints, et l'utiliser comme une sorte d'indice de simulation, juste pour garder une trace des index, mais je ne pense pas ça marcherait avec le prochain. Voici essentiellement ce que j'ai jusqu'à présent:
local function each(list)
if #list > 0 then
local function my_itr(lst, ind)
return next(lst, ind);
end
return my_itr, List, 0;
end
return function() end, nil, nil;
end
cela ne fonctionne que pour une table avec index int (une table de tableau), donc je me demandais si quelqu'un pouvait me aider. Merci. Edit: Pour rendre cette moins vague est un morceau exemple ici de code de ce que je suis en train d'accomplir:
local mytable = {a = 123; b = 321; 3, 2, 1, c = "bca"};
for i,v in each(mytable) do
print(i,v);
end
ce qu'il doit générer:
>a 123
>b 321
>1 3
>2 2
>3 1
>c bca
La sortie aurait pas à être commande exacte.
Votre question est plutôt difficile à comprendre. Je peux * deviner * que vous voulez itérer les clés de chaîne dans l'ordre lexicographique, mais encore - pourriez-vous s'il vous plaît poster un exemple de ce que vous voulez réaliser, c'est-à-dire une table, un morceau de code et la sortie désirée? – iehrlich
Bien sûr, je viens de l'éditer; Merci –
Vous dites ci-dessus que vous voulez seulement renvoyer des index int, mais votre sortie prévue montre un comportement identique à 'paires()'. Lequel est-ce? BTW, cette page montre comment implémenter 'paires': https://www.lua.org/pil/7.3.html. – luther