2010-12-04 32 views
2

J'ai une table qui contient 4 valeurs.Récupérer la valeur de la table puis l'enlever dans Lua

Par exemple:

2 
4 
1 
3 

J'utilise une fonction à l'étape à travers la table à la recherche de, permet de dire le numéro 1 en utilisant des paires et pour obtenir la position de celui-ci dans le tableau. J'utilise ensuite la commande table.remove pour retirer 1 de cette position. Ce que je voudrais faire est maintenant pour compresser la table afin qu'il soit 3 valeurs longues

2 
4 
3 

Je suis assez nouveau pour Lua alors soyez gentil avec moi. :)

Ce que j'est à peu près ceci:

CloseRandomConsole = math.random(1,(#ConsoleTable)) 

If CloseRandomConsole == 1 then 
for key, value in pairs(ConsoleTable) do 
if value == "1" then 
    table.remove(ConsoleTable, key) 
break 
end 
end 

Je vois où je vais mal mais je hae aucune idée de la façon de le résoudre.

math.random(1,(#ConsoleTable)) 

Je veux seulement pouvoir aléatoire entre l'une des valeurs du tableau. Et quand j'ai choisi cette vlue au hasard, je veux qu'elle soit supprimée de sorte que je serai laissé avec trois autres valeurs à partir de.

Est-ce que je vous déroute? :)

+2

Je suis sûr que vos doigts ont simplement glissé sur le clavier et tapé "LUA" au lieu de "Lua" :) – Gemini14

Répondre

2

table.remove(ConsoleTable, key) supprimera en effet une valeur de la table, diminuant ainsi sa taille de 1. Ainsi, la prochaine fois que vous appellerez math.random(1,(#ConsoleTable)), sa plage sera également réduite d'une unité. Pour être honnête, on dirait que vous allez bien, et je ne suis pas sûr de savoir quel est le problème.

Éditer: Que diriez-vous de ce one-liner? Je pense que cela va supprimer une "console" au hasard de la table. Peut-être que si vous pouvez essayer cela et si ce n'est pas ce que vous voulez, expliquez en détail ce qui ne va pas, nous pouvons essayer plus de choses.

+0

math.random (1, (# ConsoleTable)) est où je vais mal je pense. – Vitae

+0

Depuis que j'ai la possibilité de retourner 1 le script pourrait fonctionner Si CloseRandomConsole == 1 alors – Vitae

+0

J'ai essayé math.random (#ConsoleTable) juste parce que je suis désespéré. Je veux seulement pouvoir au hasard la valeur 1, 2, 3, 4 une fois. Donc, en théorie, si le script serait aléatoire 1, il serait exécuté: Si CloseRandomConsole == 1 alors. Cependant je ne veux pas écrire pour être aléatoire 1 la prochaine fois puisque je veux l'exclure des possibilités math.random. – Vitae

2

Il est généralement considéré comme une mauvaise pratique de programmation de supprimer un élément d'une table pendant que vous l'itérez. Beaucoup de langues sont assez confuses. Si vous voulez vraiment faire cela, alors vous feriez mieux de créer une deuxième table miroir, puis d'itéter dessus tout en supprimant des éléments de votre table d'origine.

Cependant, ce que je suggère est de stocker aussi l'état des consoles dans la table et de définir un à inactif (état 0 peut-être) et laisser les autres actifs (état 1). Ensuite, le joueur peut en activer un et le boss en choisit un et le désactive à nouveau. Vous auriez besoin de quelques lignes de code supplémentaires, mais cela devrait être plus flexible et plus facile à comprendre.