Je construis une boucle qui devrait utiliser différentes fréquences pour passer à la valeur suivante. Un exemple:

local color = {"Blue", "Green", "Red"}
local group = {1, 2, 3}

for i=1.3 do
  cmd(string.format('group %i ; store color %q ; clearall', group[i], color[j]))
end

Cela devrait se traduire par:

Group 1 Blue,
Group 1 Green,
Group 1 Red,
Group 2 Blue.......

Je ne peux pas obtenir la boucle dans la boucle, car je ne peux pas laisser le groupe de tables monter une seule fois en 2 cycles. Utiliser également des valeurs doubles ou utiliser [i] deux fois ne semblait pas fonctionner.

J'espère que vous pouvez m'aider.

1
Martijn van Dam 23 mai 2018 à 15:47

3 réponses

Meilleure réponse

Exécutez la boucle pour neuf itérations (c'est le nombre de combinaisons que vous faites) et utilisez math.floor pour calculer les index:

local color = {"Blue", "Green", "Red"}
local group = {1, 2, 3}
for i=0, #color*#color-1 do
    local g = math.floor(i/3)
    local c = i-3*g
    print(string.format('group %i ; store color %q ; clearall', group[g+1], color[c+1]))
end

Démo.

1
dasblinkenlight 23 mai 2018 à 13:04

Une version plus simple

for i,v in pairs(group) do
for k,c in pairs(color) do
print("Group " .. v .. " " .. c)
end
end

Très simple, ce qu'il fait, c'est qu'il itère à travers le tableau de groupe et le tableau de couleurs en même temps et imprime chaque valeur, chaque fois qu'il itère dans le tableau de groupe, il itère sur tous les éléments du tableau de couleurs, Lua a intégré la technique pour fusionner des chaînes, vous n'avez pas besoin d'utiliser la bibliothèque de chaînes :)

1
James Penner 25 mai 2018 à 07:13

Une autre façon de considérer la différence entre ' ' et " "

for i=1, #color do 
  for _, v in pairs(color) do
      print('group '..i..' ; store color "'..v..'" ; clearall')
  end
end
0
Hubert Ronald 30 mai 2018 à 03:32