Les extensions Array et Table

NetLogo 4.0.4   Manuel de l'utilisateur  

Ces extensions ajoutent deux nouvelles structures de données à NetLogo : les tableaux (array) et les tables de hachage (table).

Quand les utiliser

En général, tout ce que vous pouvez faire avec une tableau ou une table de hachage peut aussi se faire avec une simple liste. Mais vous pouvez envisager de la remplacer par un tableau ou une table de hachage pour des raisons de vitesse d'exécution du programme. Ces trois structures de données (liste, tableau et table de hachage) affichent des performances différentes, ce qui permet, en utilisant la structure de données adéquate, de créer un modèle qui tourne plus rapidement.

Les tableaux sont pratiques quand on a besoin d'une collection de données de taille fixe. Ils permettent d'accéder à, ou de lire très rapidement n'importe quel élément si vous connaissez sa position dans le tableau.

Les tables de hachage sont utiles quand il faut associer des valeurs à d'autres valeurs. Vous pouvez par exemple construire une table de mots avec leurs définitions puis rechercher ensuite la définition de n'importe quel mot. Ici, les mots sont les « clés » de la table. La recherche et la récupération de n'importe quelle clé de la table est rapide et facile, ce qui n'est pas le cas des définitions.

Comment les utiliser

Les deux extensions sont déjà installées dans NetLogo.

Pour utiliser l'extension array dans votre modèle, ajoutez la ligne suivante au début du code dans le panneau "Procedures" :

extensions [array]

Pour utiliser l'extension table dans votre modèle, ajoutez la ligne suivante au début du code dans le panneau "Procedures" :

extensions [table]

Vous pouvez même utiliser les deux extensions dans le même modèle, comme suit :

extensions [array table]

Si le modèle utilise d'autres extensions, son code possède déjà une ligne extensions, il suffit simplement d'ajouter array et/ou table dans la liste des extensions.

Pour plus d'informations concernant les extensions NetLogo, voir le Guide des extensions.

Limites concernant les clés des tables

Les clés des tables de hachage ne peuvent être que des chaînes de caractères, des nombres, des booléens ou des listes. (Les listes peuvent être des listes imbriquées aussi longtemps que tous leurs éléments sont des chaînes de caractères, des nombres ou des booléens.)

Exemple de tableau (avec l'extension Array)

let a array:from-list n-values 5 [0]
print a
=> {{array: 0 0 0 0 0}}
print array:length a
=> 5
foreach n-values 5 [?] [ array:set a ? ? * ? ]
print a
=> {{array: 0 1 4 9 16}}
print array:item a 0
=> 0
print array:item a 3
=> 9
array:set a 3 50
print a
=> {{array: 0 1 4 50 16}}

Exemple de table de hachage (avec l'extension Table)

let dict table:make
table:put dict "turtle" "cute"
table:put dict "bunny" "cutest"
print dict
=> {{table: "turtle" -> "cute", "bunny" -> "cutest" }}
print table:length dict
=> 2
print table:get dict "turtle"
=> "cute"
print table:get dict "leopard"
=> 0
print table:keys dict
=> ["turtle" "bunny"]

Problèmes connus

Quand vous exportez un monde NetLogo (en utilisant la commande export-world ou la commande de menu "Export World"), les tableaux et les tables de hachage sont exportés « par valeur ». Ce qui signifie que si vous avez la même table ou le même tableau stocké à plus d'un endroit, il y aura des tableaux ou des tables distinctes aux endroits où apparaissait la table ou le tableau original quand elle ou il sera exporté puis ré-importé. Ces duplicata contiennent initialement les mêmes valeurs, mais si l'un d'eux est modifié par le suite, l'autre ne le sera pas.

Les primitives de l'extension Array

array:from-list array:item array:set array:length array:to-list

array:from-list

array:from-list list

Retourne un nouveau tableau contenant les mêmes éléments, dans le même ordre, que dans la liste list donnée en entrée.

array:item

array:item array index

Retourne l'élément numéro index du tableau table donné (les numéros d'index vont de 0 à nombre d'éléments du tableau moins un).

array:set

array:set array index value

Donne value à l'élément numéro index du tableau table donné (les numéros d'index vont de zéro au nombre d'éléments du tableau moins un).

Notez que contrairement à la primitive replace-item pour les listes, cette commande ne crée pas de nouveau tableau. C'est le tableau existant qui est modifié.

array:length

array:length array

Retourne la longueur du tableau table donné, c'est-à-dire le nombre d'éléments contenus dans le tableau.

array:to-list

array:to-list array

Retourne une nouvelle liste contenant les mêmes éléments, dans le même ordre, que le tableau table donné.

Les primitives de l'extension Tables

table:clear table:from-list table:get table:has-key? table:keys table:length table:make table:put table:remove table:to-list

table:clear

table:clear table

Supprime toutes les paires clé-valeur de la table.

table:from-list

table:from-list list

Retourne une nouvelle table formée des éléments de list. L'entrée doit être une liste de listes contenant deux éléments (ou paires). Le premier élément de la paire est la clé et le second élément est la valeur qui lui est associée.

table:get

table:get table key

Retourne la valeur associée à la clé key qui est stockée dans la table. Génère une erreur si table n'a pas de paire correspondant à la clé fournie.

table:has-key?

table:has-key? table key

Retourne true (vrai) si la clé key possède une entrée (une paire correspondante dans la table.

table:keys

table:keys table

Retourne une liste de toutes les clés de la table.

table:length

table:length table

Retourne le nombre de paires d'éléments dans la table.

table:make

table:make

Retourne une nouvelle table vide.

table:put

table:put table key value

Place la clé key et sa valeur associée value dans la table et les met en correspondance. Si table contient déjà une entrée pour la clé key donnée, sa valeur est remplacée par value.

table:remove

table:remove table key

Supprime la clé key et sa valeur dans la table.

table:to-list

table:to-list table

Retourne une liste formée des éléments de la table table. Les éléments de la liste sont des listes à deux éléments (ou paires). Le premier élément de la paire est la clé et le second est la valeur qui lui est associée.