J'ai ce tableau, avec quelques valeurs (int) et je veux vérifier si une valeur donnée par l'utilisateur est égale à une valeur dans cette chaîne. Si c'est le cas, affichez un message du type "Vous avez votre chaîne".
Exemple de liste:
local op = {
{19},
{18},
{17}
}
if 13 == (the values from that array) then
message
else
other message
Comment cela peut-il être fait?
Lua n'a pas de tableaux stricts comme les autres langues - il n'a que des tables de hachage. Les tableaux en Lua sont considérés comme des tableaux lorsque leurs indices sont numériques et densément compressés, ne laissant aucun espace. Les indices dans le tableau suivant seraient 1, 2, 3, 4
.
local t = {'a', 'b', 'c', 'd'}
Lorsque vous avez une table de type tableau, vous pouvez vérifier si elle contient une certaine valeur en boucle à travers la table. Vous pouvez utiliser un for..in
loop, et la fonction ipairs
pour créer une fonction générique.
local function has_value (tab, val)
for index, value in ipairs(tab) do
if value == val then
return true
end
end
return false
end
Nous pouvons utiliser ce qui précède dans un if
conditionnel pour obtenir notre résultat.
if has_value(arr, 'b') then
print 'Yep'
else
print 'Nope'
end
Pour réitérer mon commentaire ci-dessus, votre exemple de code actuel n'est pas un tableau de nombres de type tableau. Il s'agit plutôt d'une table de type tableau contenant des tables de type tableau, qui ont des nombres dans chacun de leurs premiers indices. Vous auriez besoin de modifier la fonction ci-dessus pour travailler avec votre code affiché, le rendant moins générique.
local function has_value (tab, val)
for index, value in ipairs(tab) do
-- We grab the first index of our sub-table instead
if value[1] == val then
return true
end
end
return false
end
Lua n'est pas un langage très volumineux ou complexe, et sa syntaxe est très claire. Si les concepts ci-dessus vous sont totalement étrangers, vous devrez passer du temps à lire de la vraie littérature, pas seulement à copier des exemples. Je vous conseille de lire Programmation en Lua pour vous assurer que vous comprenez les bases. Il s'agit de la première édition, destinée à Lua 5.1.
Vous pouvez également rendre la vérification si la valeur existe dans votre tableau plus efficace en déplaçant vos valeurs vers l'index et en leur affectant la vraie valeur.
Ensuite, lorsque vous vérifiez votre table, vous vérifiez simplement s'il existe une valeur sur cet index, ce qui vous fera gagner du temps car vous n'avez pas besoin de parcourir toute la table dans le pire des cas ...
Voici l'exemple que j'avais en tête:
local op = {
[19]=true,
[18]=true,
[17]=true
}
if op[19] == true then
print("message")
else
print("other message")
end
La table op
de votre question est en fait un tableau (tableau) de tableaux.
Pour vérifier si une valeur existe dans une table:
local function contains(table, val)
for i=1,#table do
if table[i] == val then
return true
end
end
return false
end
local table = {1, 2, 3}
if contains(table, 3) then
print("Value found")
end