Arma: Les tableaux – part 1

Arma utilise beaucoup les tableaux. Les tableaux sont des structures qui servent à stocker des variables. Quelque soit l’usage que vous ferez des scripts, vous utiliserez quoi qu’il arrive les tableaux ! Vous devez donc apprendre à les utiliser.

On peut reconnaitre les tableaux par la notation []. Pour créer un tableau vide, il faut assigner [] à une variable. Pour créer un tableau avec des variables dedans, il faut lui utiliser la notation [variable1, variable2, etc..] Les variables peuvent contenir n’importe quel type de valeur « string », « scalar », « object », « code », etc.

Un tableau vide:

_tableau = [];

Un tableau de scalar:

_tableau = [1,2,3,4,5,6,7,8,9];

Un tableau mixte contenant différents type de valeurs

_tableau = [player,_var,true,var,56,"ok",_this];

Pour connaitre le nombre d’éléments dans le tableau, il faut utiliser la commande count

_array = [];
_result = count _array;
// resultat : 0

_array = ["hello"];
_result = count _array;
// resultat : 1

_array = [1,2,3];
_result = count _array;
// resultat : 3

La commande count ne peut compter que les tableaux à 1 dimension. Pour explorer les tableaux multidimensionnels, vous devez itérer dans chaque tableau séparément.

_tableau = [[1,2,3],[5,6,7]]; 
//le tableau contient deux autres tableaux [1,2,3] and [5,6,7]

Pour accéder à un élement de votre tableau, vous devez utiliser la commande select accompagné de l’index (position) de l’élement dans le tableau. Le premier élément du tableau (de la gauche vers la droite) a la position 0, le seconde la position 1, et ainsi de suite. Ainsi pour atteindre l’élément 5, vous devrez utiliser select 4.

Pour accédér au dernier élément d’un tableau, vous pouvez compter le nombre total d’élément et soustraire 1.

_tableau = ["orange", "bleu", "rouge", "vert"];
_resultat = _tableau select 1;
// resultat bleu

_resultat = _tableau select ((count _tableau) - 1);
// resultat = vert <- dernier élément

Pour accéder aux éléments dans un tableau muti dimensionnel, vous devez suivre la hiérarchie des tableaux avec la commande select.

Ainsi pour accéder au 3ème élément du 1er tableau dans le 2ème tableau:

   _array = [ [[1,2],[3,4]] , [[5,6,7],[8,9]] ]; 
    _result = ((_array select 1) select 0) select 2; 
    //_result is 7

Retournons maintenant à la commande count. Cette commande a une syntaxe alternative, qui permet également d’exécuter du code sur chaque élément du tableau. Si le code exécuté sur l’élément renvoie vrai, il est compté, sinon cet élément n’est pas compté. Essayons de voir combien de fois « John » apparait dans ce tableau.

   _tableau = ["John","Samantha","Billy","Archer","John","John","Peter","Casey"]; 
    _resultat = {_x == "John"} count _tableau; 
    //_resultat is 3

Comme vous avez pu le voir, nous avons utilisé la variable spéciale _x dans le code. La commande count va itérer pour chaque élément du tableau _x et appeler notre code {} pour chaque itération.

_x est une variable spéciale qui assigne l’élément courant itéré du tableau. Si notre élément courent est égale à John il est compté. Soyez prudent, car ce type de code peut également provoqué des erreurs avec les tableaux de type mixte. Si vous faites une comparaison assurez vous de bien prendre en compte le type que vous
utilisez.

   _tableau = ["John",23,"Samantha",25,"Billy",67,"Archer",45,"John",23,"John",32]; 
    _resultat = {_x == "John"} count _tableau; 
    //script ERROR

va provoquer une erreur dès l’itération sur le deuxième élément, car vous comparer une chaine de caractère à un scalar. Pour éviter cela, vous pouvez également vérifier dans la première condition de l’évaluation: le type de variable, et utiliser en complément une lazy evaluation qui ne sera executé que si le type est correcte.

   _tableau = ["John",23,"Samantha",25,"Billy",67,"Archer",45,"John",23,"John",32]; 
    _result = {typeName _x == "STRING" && {_x == "John"}} count _array; 
    //no ERROR

Une autre solution consiste également à bien structurer vos tableaux mixte dès le départ, en définissant précisément quel type d’élément se trouve à quel position.

Dans ce cas de figure, la commande isEqualTo pourra également vous être utile:

   _tableau = ["John",23,"Samantha",25,"Billy",67,"Archer",45,"John",23,"John",32]; 
    _resultat = {_x isEqualTo "John"} count _tableau;

La commande isEqualTo n’est pas sensible au type, est sensible à la casse, et plus rapide que l’opérateur ==

Pour simplement tester si une valeur est présente dans un tableau, vous pouvez utiliser la commande in. Elle retourne vrai si la valeur est présente, faux sinon. Pour vérifier si un élement est présent, et que vous souhaitez récupérer son index de position dans le tableau vous pouvez utiliser la commande find.

Find retournera -1 s’il ne trouve rien, sinon renverra l’index du premier élément qu’il trouve correspondant au critère de recherche.

_tableau = [1,"two",3,"four",1,"two",3,"four"]; 
_resultat = "four" in _tableau; 
//_resultat est true; 

_resultat = 4 in _tableau; 
//_resultat est false; 

_resultat = _tableau find "three"; 
//_resultat est -1 

_resultat = _tableau find 3; 
//_resultat est 2

Les deux commandes sont cases sensitives, et ne fonctionnent pas avec les tableaux imbriqués.

_tableau = ["one","two","three"]; 
_resultat = "TWO" in _tableau; 
//_resultat est false 

_resultat = _tableau find "TWO"; 
//_resultat est -1 

_tableau = [[1,2,3],[4,5,6]]; 
_resultat = [1,2,3] in _tableau; 
//_resultat est false 

_resultat = _tableau find [1,2,3]; 
//_resultat est -1

Cet article a été initialement rédigé par Killzone Kid, corrigé par Code34

Votre commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l’aide de votre compte WordPress.com. Déconnexion /  Changer )

Photo Google

Vous commentez à l’aide de votre compte Google. Déconnexion /  Changer )

Image Twitter

Vous commentez à l’aide de votre compte Twitter. Déconnexion /  Changer )

Photo Facebook

Vous commentez à l’aide de votre compte Facebook. Déconnexion /  Changer )

Connexion à %s