web-dev-qa-db-fra.com

Vérifiez si le tableau contient une valeur spécifique

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?

14
Ether Metin

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.

23
Oka

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
7
Half an Hour Dev

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
5
Diego Pino