Comment itérer sur des tables en Lua


  • Français


  • Dans le langage de programmation Lua, un tableau est appelé une table. Une table est utilisée en Lua pour stocker des données. Si vous stockez beaucoup de données de manière structurée, il est utile de connaître vos options pour récupérer ces données lorsque vous en avez besoin.

    Programmation et développement

    Créer un tableau en Lua

    Pour créer une table en Lua, vous instanciez la table avec un nom arbitraire :

    mytable = {}

    Il existe différentes manières de structurer vos données dans un tableau. Vous pouvez le remplir avec des valeurs, en créant essentiellement une liste (appelée liste dans certaines langues):

    mytable = { 'zombie', 'apocalypse' }

    Ou vous pouvez créer un tableau associé (appelé un carte ou dictionnaire dans certaines langues). Vous pouvez ajouter des clés arbitraires à la table en utilisant la notation par points. Vous pouvez également ajouter une valeur à cette clé de la même manière que vous ajoutez une valeur à une variable :

    myarray = {}
    myarray.baz = 'happy'
    myarray.qux = 'halloween'

    Vous pouvez ajouter une vérification avec le assert() fonction:

    assert(myarray.baz == 'happy', 'unexpected value in myarray.baz')
    assert(myarray.qux == 'halloween', 'unexpected value in myarray.qux')

    Vous avez maintenant deux tables : une de style liste mytable et un style de tableau associatif myarray.

    Itérer sur une table avec des paires

    de Lua pairs() La fonction extrait les paires clé et valeur d’une table.

    print('pairs of myarray:')

    for k,v in pairs(myarray) do
      print(k,v)
    end

    Voici la sortie :

    pairs of myarray:
    baz     happy
    qux     halloween

    S’il n’y a pas de clés dans une table, Lua utilise un index. Par exemple, le mytable le tableau contient les valeurs zombie et apocalypse. Il ne contient pas de clés, mais Lua peut improviser :

    print('pairs of mytable:')

    for k,v in pairs(mytable) do
      print(k,v)
    end

    Voici la sortie :

    1   zombie
    2   apocalypse

    Itérer sur une table avec des paires d’ipaires

    Pour tenir compte du fait que les tables sans clés sont courantes, Lua fournit également le ipairs fonction. Cette fonction extrait l’index et la valeur :

    print('ipairs of mytable:')

    for i,v in ipairs(mytable) do
      print(i,v)
    end

    La sortie est, dans ce cas, la même que la sortie de pairs:

    1   zombie
    2   apocalypse

    Cependant, observez ce qui se passe lorsque vous ajoutez une paire clé/valeur à mytable:

    mytable.surprise = 'this value has a key'

    print('ipairs of mytable:')

    for i,v in ipairs(mytable) do
      print(i,v)
    end

    Lua ignore la clé et la valeur car ipairs récupère seulement entrées indexées :

    1   zombie
    2   apocalypse

    La paire clé-valeur, cependant, a été stockée dans la table :

    print('pairs of mytable:')

    for k,v in ipairs(mytable) do
      print(k,v)
    end

    Le résultat:

    1          zombie
    2          apocalypse
    surprise   this value has a key

    Récupérer des valeurs arbitraires

    Vous n’avez pas besoin de parcourir une table pour en extraire des données. Vous pouvez appeler des données arbitraires par index ou clé :

    print('call by index:')
    print(mytable[2])
    print(mytable[1])
    print(myarray[2])
    print(myarray[1])

    print('call by key:')
    print(myarray['qux'])
    print(myarray['baz'])
    print(mytable['surprise'])

    Le résultat:

    call by index:
    apocalypse
    zombie
    nil
    nil

    call by key:
    halloween
    happy
    this value has a key

    Structures de données

    Parfois, l’utilisation d’une table Lua est beaucoup plus logique que d’essayer de suivre des dizaines de variables individuelles. Une fois que vous avez compris comment structurer et récupérer des données dans un langage, vous êtes en mesure de générer des données complexes de manière organisée et sécurisée.

    Source

    Houssen Moshinaly

    Pour contacter personnellement le taulier :

    Laisser un commentaire

    Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

    Copy code