Aller au contenu

Messages recommandés

Posté(e)

boujour,

Ne vous moquez pas de moi SVP :5:

 

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 :93:

Posté(e)

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
Posté(e)

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
Posté(e)

"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
Posté(e)

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
Posté(e)

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 ... :98:

 

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
  • Upvote 1
Posté(e)

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

  • Upvote 1
Posté(e)

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)

Posté(e)

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

Envoyé de mon SM-G900F en utilisant Tapatalk

Posté(e)

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

  • Upvote 1
×
×
  • Créer...