Le module linkedList est une implémentation personnalisée d'une liste chaînée en Lua. Il fournit une interface pour manipuler des collections d'éléments de manière séquentielle, avec des opérations efficaces pour l'ajout, la suppression, la recherche et l'itération sur les éléments. Ce module est utile lorsque vous avez besoin de structures de données dynamiques où la taille peut changer fréquemment.
Le module linkedList est conçu pour être flexible et réutilisable. Après l'avoir chargé via le ModuleLoader, vous pouvez créer autant d'instances de listes chaînées que nécessaire, à n'importe quel moment dans votre script. Chaque instance est indépendante et possède ses propres éléments, ce qui vous permet de gérer plusieurs structures de données simultanément sans interférences.
Chargement du module
Pour commencer, vous devez charger le module linkedList avec le ModuleLoader :
-- Chargement du ModuleLoader
ModuleLoader = dofile(global:getCurrentDirectory() .. [[\YayaToolsTouch\Module\ModuleLoader.lua]])(1)
-- Chargement du module linkedList
linkedListModule = ModuleLoader:load("linkedList")
Une fois le module chargé, vous pouvez instancier une linkedList à tout moment dans votre script, en appelant la fonction linkedListModule() autant de fois que nécessaire :
-- Création d'une nouvelle instance de linkedList
local myLinkedList = linkedListModule()
-- Vous pouvez créer plusieurs instances indépendantes
local queue = linkedListModule()
local stack = linkedListModule()
local playlist = linkedListModule()
Chaque instance de linkedList est indépendante des autres. Vous pouvez les manipuler séparément sans qu'elles n'interfèrent entre elles.
Par exemple, vous pouvez créer des listes chaînées pour différentes structures de données :
-- Création d'une file d'attente (Queue)
local queue = linkedListModule()
queue:append("Client 1")
queue:append("Client 2")
queue:append("Client 3")
-- Création d'une pile (Stack)
local stack = linkedListModule()
stack:insert("Plateau 1")
stack:insert("Plateau 2")
stack:insert("Plateau 3")
-- Création d'une playlist
local playlist = linkedListModule()
playlist:append("Chanson A")
playlist:append("Chanson B")
playlist:append("Chanson C")
Vous pouvez également instancier une linkedList à tout moment dans votre script, par exemple au sein de fonctions :
function createInventory()
local inventory = linkedListModule()
-- Ajouter des items à l'inventaire
inventory:append("Épée")
inventory:append("Bouclier")
return inventory
end
-- Utilisation de la fonction pour différents personnages
local warriorInventory = createInventory()
local mageInventory = createInventory()
mageInventory:append("Bâton magique")
Créer plusieurs instances de linkedList vous permet de :
ModuleLoader = dofile(global:getCurrentDirectory() .. [[\YayaToolsTouch\Module\ModuleLoader.lua]])(1)
linkedListModule = ModuleLoader:load("linkedList")
local myLinkedList = linkedListModule()
local anotherLinkedList = linkedListModule()
myLinkedList:append("Item 1")
local item = myLinkedList:get(1)
myLinkedList:removeAt(1)
En suivant ces étapes, vous pouvez intégrer le module linkedList dans vos scripts et bénéficier de sa flexibilité en créant autant d'instances que nécessaire, quand vous le souhaitez, pour gérer vos données de manière efficace.
Ajoute un élément à la fin de la liste chaînée.
Syntaxe
linkedList:append(value)
Paramètres
Retourne
Insère un élément au début de la liste chaînée.
Syntaxe
linkedList:insert(value)
Paramètres
Retourne
Insère un élément à une position spécifique dans la liste chaînée.
Syntaxe
linkedList:insertAt(index, value)
Paramètres
Retourne
Récupère la valeur de l'élément à une position spécifique.
Syntaxe
local value = linkedList:get(index)
Paramètres
Retourne
Retourne le nombre d'éléments dans la liste chaînée.
Syntaxe
local count = linkedList:length()
Paramètres
Retourne
Vérifie si la liste chaînée est vide.
Syntaxe
local empty = linkedList:isEmpty()
Paramètres
Retourne
Supprime l'élément à une position spécifique dans la liste chaînée.
Syntaxe
local success = linkedList:removeAt(index)
Paramètres
Retourne
Vide la liste chaînée de tous ses éléments.
Syntaxe
linkedList:clear()
Paramètres
Retourne
Trouve la position de la première occurrence d'une valeur dans la liste chaînée.
Syntaxe
local index = linkedList:indexOf(value)
Paramètres
Retourne
Inverse l'ordre des éléments dans la liste chaînée.
Syntaxe
linkedList:reverse()
Paramètres
Retourne
Applique une fonction à chaque élément de la liste, retournant une nouvelle liste chaînée avec les résultats.
Syntaxe
local newList = linkedList:map(callback)
Paramètres
Retourne
Crée une nouvelle liste chaînée avec les éléments qui satisfont une condition donnée.
Syntaxe
local filteredList = linkedList:filter(predicate)
Paramètres
Retourne
Recherche le premier élément qui satisfait une condition donnée.
Syntaxe
local value = linkedList:find(predicate)
Paramètres
Retourne
Vérifie si une valeur existe dans la liste chaînée.
Syntaxe
local exists = linkedList:contains(value)
Paramètres
Retourne
Convertit la liste chaînée en une instance du module list.
Syntaxe
local listInstance = linkedList:toList()
Paramètres
Retourne
Crée une nouvelle liste chaînée à partir d'une table Lua standard (array).
Syntaxe
local newList = linkedList:fromList(array)
Paramètres
Retourne
Crée une copie de la liste chaînée.
Syntaxe
local clonedList = linkedList:clone()
Paramètres
Retourne
Retourne une fonction itératrice pour parcourir la liste chaînée.
Syntaxe
for index, value in linkedList:iterator() do
-- Opérations
end
Paramètres
Retourne
Le module linkedList implémente plusieurs métaméthodes pour une intégration transparente avec Lua.
Permet l'itération sur la liste chaînée en utilisant les boucles pairs() et ipairs().
Utilisation
for index, value in pairs(linkedList) do
-- ...
end
for index, value in ipairs(linkedList) do
-- ...
end
Permet d'obtenir la taille de la liste chaînée en utilisant l'opérateur #.
Utilisation
local count = #linkedList
Définit le comportement de l'opérateur == pour comparer deux listes chaînées.
Utilisation
local areEqual = linkedList1 == linkedList2
Définit le comportement de l'opérateur + pour concaténer deux listes chaînées.
Utilisation
local combinedList = linkedList1 + linkedList2
Définit le comportement de l'opérateur - pour soustraire les éléments d'une liste à une autre.
Utilisation
local resultList = linkedList1 - linkedList2
Voici un exemple illustrant comment utiliser le module linkedList dans un script :
-- Chargement du ModuleLoader
ModuleLoader = dofile(global:getCurrentDirectory() .. [[\YayaToolsTouch\Module\ModuleLoader.lua]])(1)
-- Chargement du module linkedList
linkedListModule = ModuleLoader:load("linkedList")
-- Création d'une nouvelle instance de linkedList
local myLinkedList = linkedListModule()
-- Ajout d'éléments à la liste chaînée
myLinkedList:append("A"):append("B"):append("C")
-- Insertion d'un élément au début
myLinkedList:insert("Start")
-- Affichage des éléments
for index, value in myLinkedList:iterator() do
print("Index:", index, "Value:", value)
end
-- Recherche d'une valeur
local containsB = myLinkedList:contains("B")
print("La liste contient 'B' :", containsB)
-- Suppression d'un élément
myLinkedList:removeAt(2)
-- Longueur de la liste
local length = myLinkedList:length()
print("Longueur de la liste :", length)
Si vous rencontrez des problèmes ou avez des questions concernant le module linkedList :