2011-07-18 6 views
2

Nécessité de créer une table afin que je peux obtenir une information de celui-ci ainsi:Création Lua avancée Tableau

table[attacker][id] 

Et si je vais utiliser

print(table[attacker][id]) 

Il doit imprimer la valeur .

Essayé bien des égards, mais ont pas trouvé de bon ...

Je pense que ce devrait être quelque chose comme ça ...

table.insert(table, attacker, [id] = value) 

^Cela ne fonctionne pas.

Quelqu'un peut-il m'aider?


Modifier

Eh bien, quand j'essaie de cette façon:

x = {} 
function xxx() 
    if not x[attacker][cid] then 
     x[attacker][cid] = value 
    else 
     x[attacker][cid] = x[attacker][cid] + value 
    end 
    print(x[attacker][cid]) 
end 

je reçois une erreur disant: '?'

tentative de champ d'index (Une valeur nulle)

+1

Cette erreur signifie exactement ce qu'elle dit ...'x [attaquant]' est apparemment 'nul '. – Amber

Répondre

5

Vous avez besoin des accolades pour créer la table intérieure:

table.insert(my_table, attacker, {[id]=value}) 

ou

-- the advantage of this is that it works even if 'attacker' isn't a number 
my_table[attacker] = {[id]=value} 

a = 1 
b = 2 
c = 3 
d = {} 
table.insert(d, a, {[b]=c}) 
print(d[a][b]) -- prints '3' 
+0

Cela ne fonctionne que si 'attacker' est un nombre entier, car table.insert ne fonctionne que pour insérer des valeurs dans la partie tableau de la table. –

+0

Bien sûr. Bien sûr, la syntaxe d'affectation de table normale peut également fonctionner pour des clés non entières; J'adaptais simplement l'exemple de l'OP à la chose la plus proche qui fonctionnerait. – Amber

+0

a modifié ma question. – Lucas

2

Qu'est-ce que attacker? C'est-à-dire, quelle valeur contient-elle? Il n'a vraiment rien à voir avec ce qu'il contient puisque les tables Lua peuvent utiliser n'importe quelle valeur Lua comme clé. Mais il serait utile de savoir.

En tout cas, c'est vraiment simple.

tableName = {}; --Note: your table CANNOT be called "table", as that table already exists as part of the Lua standard libraries. 
tableName[attacker] = {}; --Create a table within the table. 
tableName[attacker][id] = value; --put a value in the table within the table. 

Le problème dans votre édition est arrivé parce que vous n'avez pas pris note de l'étape 2 ci-dessus. Les valeurs d'une table Lua sont vides (nulles) jusqu'à ce qu'elles aient une valeur. Par conséquent, jusqu'à la ligne 2, tableName[attacker] est nul. Vous ne pouvez pas indexer une valeur nulle. Par conséquent, doit s'assurer que toutes les clés dans tableName que vous prévoyez indexer sont en fait des tables.

Pour d'autres termes, vous ne pouvez pas faire tableName[attacker][id] à moins que vous savez que type(tableName[attacker]) == "table" est vrai.

+0

a modifié ma question – Lucas

1

vous devriez utiliser table = {['key']='value'}, le rend plus facile.