jojo Posté(e) le 21 décembre 2015 Signaler Posté(e) le 21 décembre 2015 boujour, Ne vous moquez pas de moi SVP Je cherche à remplir en LUA une table à 2 colonnes et plusieurs lignes (=matrice). finalement je devrais être capable de modifie un élément particulier de la matrice. exemple de table remplie la la main (mais je voudrais le faire en LUA) : local table = { {11, 21}, {12, 22}, {13, 23}, {14, 24} } et je sais la relire en LUA : for i = 1, #table do fibaro:debug(table[i][1] .. " - " .. table[i][2]) end et voici le debug [DEBUG] 18:27:22: Table et sous-table [DEBUG] 18:27:22: Affichage [DEBUG] 18:27:22: 11 - 21 [DEBUG] 18:27:22: 12 - 22 [DEBUG] 18:27:22: 13 - 23 [DEBUG] 18:27:22: 14 - 24 cela fait 2 heures que je cherche, et je sais que c'est une bêtise. Je parie que notre "quiche en LUA" sait comment il faut faire
Berale64 Posté(e) le 21 décembre 2015 Signaler Posté(e) le 21 décembre 2015 J'ai encore jamais fait, mais il me semble qu'il faut jouer avec table.insert 1
mprinfo Posté(e) le 21 décembre 2015 Signaler Posté(e) le 21 décembre 2015 local toto = {} local Position = 1 -- Position dans la table local Valeur = {10, 20} table.insert(Toto, Position, Valeur)
jojo Posté(e) le 21 décembre 2015 Auteur Signaler Posté(e) le 21 décembre 2015 merci mprinfo, avec les infos de Berale24 j'avais trouvé, et j'étais justement entrain de poster la solution la source : http://www.lua.org/pil/19.2.html le code : -- table et sous table fibaro:debug("Table et sous-table") local tabl = {} for i = 1,4 do table.insert(tabl, {10+i, 20+i}) end fibaro:debug("Affichage") for i = 1, #tabl do fibaro:debug(tabl[i][1] .. " - " .. tabl[i][2]) end fibaro:debug("Replace line 2") table.remove (tabl, 2) table.insert (tabl, 2, {41, 42}) fibaro:debug("Affichage") for i = 1, #tabl do fibaro:debug(tabl[i][1] .. " - " .. tabl[i][2]) end le log : [DEBUG] 19:29:44: Table et sous-table [DEBUG] 19:29:44: Affichage [DEBUG] 19:29:44: 11 - 21 [DEBUG] 19:29:44: 12 - 22 [DEBUG] 19:29:44: 13 - 23 [DEBUG] 19:29:44: 14 - 24 [DEBUG] 19:29:44: Replace line 2 [DEBUG] 19:29:44: Affichage [DEBUG] 19:29:44: 11 - 21 [DEBUG] 19:29:44: 41 - 42 [DEBUG] 19:29:44: 13 - 23 [DEBUG] 19:29:44: 14 - 24
mprinfo Posté(e) le 21 décembre 2015 Signaler Posté(e) le 21 décembre 2015 ben va te faire voir à‡a c'est pour trier table.sort(toto) Moi je préfère ce site il est en francais http://www.luteus.biz/Download/LoriotPro_Doc/LUA/LUA_Training_FR/LUA_Tableaux.html
Berale64 Posté(e) le 21 décembre 2015 Signaler Posté(e) le 21 décembre 2015 Voilà , c'est ça le forum. Petite remarque pour ceux qui s'inscrivent juste pour le tirage au sort! J'ai rein dit,
Lazer Posté(e) le 21 décembre 2015 Signaler Posté(e) le 21 décembre 2015 Il y a ça aussi pour ajouter des nouvelles lignes àune table existante, qui pourrait s'appeler table.append() : datas[#datas+1] = {} datas[#datas].id = 1 datas[#datas].name = 'toto' datas[#datas].value = 127
mprinfo Posté(e) le 21 décembre 2015 Signaler Posté(e) le 21 décembre 2015 "append" cela me rappel du dbase APPEND BLANK Jojo pour visualisé je préfère cela for _,v in ipairs(table) do fibaro:debug(v[1] .. " - " .. v[2]) end plutôt que cela for i = 1, #table do fibaro:debug(table[i][1] .. " - " .. table[i][2]) end
Lazer Posté(e) le 21 décembre 2015 Signaler Posté(e) le 21 décembre 2015 Et pourtant.... le plus performant c'est ça : local elements = #table for i = 1, elements do fibaro:debug(table[i][1] .. " - " .. table[i][2]) end
jojo Posté(e) le 21 décembre 2015 Auteur Signaler Posté(e) le 21 décembre 2015 Merci à tous pour vos retours. J'ai beaucoup appris, dont le fait que ce que je voulais faire fonctionne en théorie, mais pas dans la pratique (problèmes des ms de la box) Donc j'abandonne, c'était quand-même pour "enc...." les mouches. Et évidemment, je n'y suis pas arrivé. Je devrais peut-être demander à mprinfo qui en a une petite ... Lazer, merci, mais j'ai rien compris ... Il y a ça aussi pour ajouter des nouvelles lignes à une table existante, qui pourrait s'appeler table.append() : datas[#datas+1] = {} datas[#datas].id = 1 datas[#datas].name = 'toto' datas[#datas].value = 127 1
mprinfo Posté(e) le 21 décembre 2015 Signaler Posté(e) le 21 décembre 2015 Il t'explique comment ajouter un table Envoyé de mon SM-G900F en utilisant Tapatalk
jojo Posté(e) le 21 décembre 2015 Auteur Signaler Posté(e) le 21 décembre 2015 ok, j'ai pigé. (je suis belge : je comprend vite, mais il faut m'expliquer longtemps ...) C'est tordu, mais beau. mais làc'est une table avec des clé, juste c'est mieux. Peux-être qu'un replace pourrait se faire également de la sorte, sans faire de remove puis de insert. A tester 1
Lazer Posté(e) le 21 décembre 2015 Signaler Posté(e) le 21 décembre 2015 jojo, ma technique de "append" (que je n'ai pas inventé mais trouvé avec l'aide de mon ami Google...) permet d'ajouter un élément àun tableau existant, quand tu ne connais pas àquel indice tu en es. Je voulais juste partager une technique supplémentaire qui peut être utile dans certain cas (je l'utilise massivement dans Domocharts)
mprinfo Posté(e) le 21 décembre 2015 Signaler Posté(e) le 21 décembre 2015 Et pourtant.... le plus performant c'est ça : local elements = #table for i = 1, elements do fibaro:debug(table[i][1] .. " - " .. table[i][2]) end Tu peux m'expliquer pourquoi ? STPEnvoyé de mon SM-G900F en utilisant Tapatalk
Lazer Posté(e) le 21 décembre 2015 Signaler Posté(e) le 21 décembre 2015 - On ne calcule qu'une seule fois le nombre d'éléments dans la table (opérateur # ) et on stocke dans une variable locale - Les boucles "for" par "incrément de 1" sont plus rapides qu'en utilisant "ipairs", lui-même plus rapide que "pairs" Bon après ça se joue à pas grand chose, faut vraiment faire du benchmark sur de très grosses boucles pour sentir la différence. Et même si le ipairs est un peu plus lent que l'incrément par 1, il permet d'alléger l'écriture, et donc la compréhension du code, donc ça a ses avantages quand même. 1
mprinfo Posté(e) le 21 décembre 2015 Signaler Posté(e) le 21 décembre 2015 Ok merci c'est bien vu. De récupérer le nombres d'entrée dans une variable Envoyé de mon SM-G900F en utilisant Tapatalk
Messages recommandés