Listes et tableaux

Un peu plus de fonctionnalités de Perl doivent être couverts avant tout des programmes plus intéressants peuvent être écrits. Premièrement, nous avons besoin de Perl «listes» (ou «tableaux»). Une liste Perl est comme une classe tableau dynamique en C + + ou Java (java.util.Vector par exemple). Les listes ne pas utiliser la syntaxe objet de Perl, mais une liste est en fait un objet qui est propriétaire des données et qui a un groupe de sociétés associées de fonctions. Une liste Perl:

  

Possède une collection d'éléments de données (généralement des valeurs scalaires, mais vous pouvez construire des listes de listes et d'autres structures plus complexes comme l'explique le perldsc. T (OK, 'a fait pour ", étant donné que ces fonctions ne sont pas membres de la classe):

- Créez une liste, généralement, il l'initialisation d'un ensemble non vide d'éléments de données (même si les listes vides sont fines).

- Ajouter des éléments "à l'avant» ou «à la fin 'de la liste.

- Supprimer des éléments "à l'avant» ou «à la fin 'des listes.

- Les éléments d'accès à des positions spécifiques (cette caractéristique lui donne 'array'-like comportements ainsi que des comportements de liste).

- Retourne la taille de sa collection (longueur de tableau dynamique).

- Copier dans un autre tableau.

D'autres fonctions liées aux listes incluent des fonctions de tri des listes et pour le retour des copies des listes avec les éléments dans l'ordre inverse.

Les listes sont désignées qui utilisent les '@' qualification de type. Leurs noms suivent les conventions habituelles

- Lettre suivie de caractères alphanumériques (et quelques autres caractères dans les noms spéciaux pour les listes fournies dans le noyau de Perl). Lorsque des noms de formage, Perl considère le caractère de soulignement comme une lettre. Liste des noms valides sont:

@ @ mylist résultats inputlines @ @ @ _data list_1

Perl gère les espaces de noms «distinct» pour son scalaires différents, liste et les types de données de hachage (et d'autres types tels que «descripteurs de fichier '). Vous pouvez avoir un scalaire $ résultats et la liste des résultats sans causer @ Perl toute confusion (bien que vous mai de rompre un programmeur de maintenance inexpérimentés qui doit s'occuper de votre code).

Littéraux de liste sont pris en charge: (1, 2, 3) ( "Tom", "Dick", "Harry", "Sue") ($ nom, adresse, $ ville)

Liste des littéraux sont souvent utilisés pour initialiser des tableaux. Un autre usage dispose de la liste littéral comme une «lvalue» (quelque chose sur le côté gauche d'une instruction d'affectation). Cette utilisation sera illustrée plus tard, c'est une commodité caractéristique liée à l'extraction d'éléments spécifiques à partir d'une liste existante. Quelques exemples de littéraux liste étant utilisé dans la liste / création de la matrice sont:

@ PlacesIveBeen = (); # J'ai été nulle part - donc, une liste vide @ GradePts = (45, 50, 65, 75, 85); @ villes = ( "London", "Paris", "New York" , "Rome", "Tokyo", "Sydney"); @ personnes = ( "Tom", "Dick", "Harry", "Sue"); @ TeenYears = (13 .. 19);

La dernière de ces illustre Perl '..' gamme de l'opérateur. Il s'agit d'un moyen plus facile de définir la collection en tant que (13, 14, 15, 16, 17, 18, 19). Gamme opérateurs peuvent être utilisés dans 'foreach' itératif construit - pour (1 .. 100); boucles foreach sont expliqués plus loin dans cet article. Comme il est fréquent d'avoir besoin d'initialiser une liste de mots, Perl dispose d'une fonction d'assistance qw () . Ainsi, vous pourriez avoir:

personnes @ = qw (Tom Dick Harry SUE);

Le qw () n'est pas toujours appropriée. L'utilisation suivantes:

@ Villes = qw (Londres Paris New York San Francisco 'Tokyo Sydney);

résultats dans une liste comme: (Londres, Paris, 'New York', Rome, Tokyo, Sydney) qui n'est probablement pas ce qui était prévu. Le fragment de code suivant illustre la création et l'utilisation de certaines listes. Les boucles illustrent différentes façons d'accéder aux éléments de la liste:

@ Cities1 = ( "London", "Paris", "New York"); # liste de 3 éléments @ Cities2 = qw (Rome 'Los Angeles' "San Francisco"); # 5 éléments! @ Cities3 = ( "Wagga "," Hay "," Cooma "); # comme qq () et (q), qw () permet à d'autres délimiteurs: @ Cities4 = qw \ Thiroul Bellambi Keiraville \;" print Cities1: \ n "; $ size = @ Cities1; for ($ i = 0; $ i <$ size; $ i + +) (print Cities1 [$ i], "\ n";) print "Cities1: \ n"; foreach $ city (@ Cities2) (print $ city, "\ n";) print "Cities3: \ n"; foreach $ i (0 .. $ # Cities3) (print $ i Cities3 [$], "\ n";) print "Cities4: @ Cities4 \ n "; print @ Cities4;

La ligne $ size = @ Cities1; illustre l'utilisation d'un tableau dans un «contexte scalaire»; Perl interprète cela comme une demande de la longueur du tableau, de sorte $ size prend la valeur 3. La première boucle for est une boucle de comptage classique, avec l'indice de boucle utilisée pour indexer dans le @ collection Cities1. Notez l'usage $ villes [$ i]; le type de données est ici un scalaire - nous sommes l'extraction d'un élément de données unique à partir de la position spécifiée dans la collection. Les deuxième et troisième pour les boucles sont des exemples de la boucle foreach Perl construire. Ces boucles sont de la forme:

foreach  (liste) pour chaque catégorie (liste) block

(Le mot-clé formay être utilisé au lieu de foreach, mais foreach est plus lisible.) Habituellement, vous voulez une variable qui fait référence à l'élément courant de la liste, mais ce n'est pas essentiel. Le premier des boucles foreach dans l'exemple de code accède simplement à chaque des (cinq!) éléments dans Cities2 $, l'impression du nom de chaque tour. La seconde ressemble plus à un comptage de la boucle, l'expression $ # Cities3 retourne la valeur (scalaire) qui est l'indice du dernier élément de la liste @ Cities3. Par conséquent, cette boucle est vraiment foreach $ i (0, 1, 2) (... ); Cette boucle utilise à nouveau l'indexation de style tableau pour extraire des éléments de données de la liste. Enfin, la liste $ Cities4 est imprimé à deux reprises. La première instruction print a la liste interpolées dans une chaîne, ce qui imprime les éléments séparés par des espaces. Le décompte final des résultats d'impression en ligne avec tous les éléments de données concaténées en une seule longue chaîne (pas une forme particulièrement utile de sortie, juste une autre caractéristique du système de Perl). Les listes peuvent être concaténées:

@ Homme = qw (Mickey, Donald); @ Femmes = qw (Minnie Daisy); DisneyMob = @ (@ Homme, @ Homme, "Pluto");

Cela produit une liste à un seul niveau (pas un Lisp liste des listes):

Mickey, Donald, Minnie, Daisy, Pluto Les tableaux peuvent être «en tranches» de donner sous-tableaux: @ line = qw (un deux trois quatre); firsttwo = @ @ line [0,1]; @ line [0,1] = ( «cinq», «six»);

ou peut avoir des valeurs poussé, puis de sortir:

@ stack = (); push (@ stack, "one"); push (@ stack, "two"); push (@ pile, 3, 4); push (@ pile, 5, 6, 7, 8, " neuf ", 101); print @ pile," \ n "; $ val = pop (@ stack); print" @ pile \ n ";

(posté et le travail unshift d'une manière similaire, l'exploitation au début plutôt qu'à la fin de cette liste. Vous pouvez combiner à pousser et déplacement, etc pour atteindre quelque chose comme un double-ended queue.) La fonction inverse renvoie une copie de la liste avec les éléments dans l'ordre inverse. Par défaut, la fonction de tri utilise un tri alphabétique, traitant tous les éléments de la liste en tant que chaînes; encore, il retourne une nouvelle liste.

@ newRevList = reverse (@ aList); @ list1 = qw (Ceci est un test quoi d'autre Bonjour tout le monde Salut maman, etc etc); # Affiche en tant que: List1: Ceci est un test de quoi d'autre Bonjour tout le monde Salut maman etc etc # tri Peform, puis imprimez la liste triée, les lettres en majuscule rang inférieur # minuscules ... Sorted: Salut Bonjour de ce monde un autre, etc etc est le test mom what # Certaines données numériques @ liste2 = (100, 26, 3, 49, -11 , 3001, 78);
# Sorted! (Classés par ordre alphabétique) Tri: -11 100 26 3 3001 49 78

Le tri par défaut comportement de tri alphabétique peuvent être modifiées, vous devez fournir votre propre routine de tri d'aide. Les fonctions d'assistance pour le tri sont un peu atypiques de routines définies par l'utilisateur, mais ils ne sont pas difficiles à écrire. Votre routine seront appelés à retourner le résultat d'une opération de comparaison sur deux éléments du tableau - ces éléments ont été placés dans les variables globales $ a et $ b avant l'appel vers votre sous-routine. (Cette utilisation de variables spécifiques mondiaux C'est ce qui rend ces sous-programmes de tri différent de programmer d'autres routines définies.) Le code suivant illustre la définition et l'utilisation d'une sous-routine de tri helper 'numeric_sort ».

#! / share / bin / perl-numeric_sort sous w (if ($ a <$ b) (return -1;) elsif ($ a == $ b) (return 0;) else (return 1;)) @ list2 = (100, 26, 3, 49, -11, 3001, 78); @ slist2 = sort @ list2; print "List2 @ liste2 \ n"; "print Triés List2 (tri par défaut) @ slist2 \ n"; @ nlist2 = numeric_sort sort @ list2; print "Tri List2 (tri numérique) @ nlist2 \ n";

Perl dispose d'un spécial <=> opérateur pour les comparaisons numériques; aide de cet opérateur, la fonction de tri numérique pourrait être simplifiée:

numeric_sort sub (@ a <=> $ b)

Perl permet en définit une ligne d'aide des fonctions de tri, ce qui permet des constructions telles que:

@ nlist2 = sort ($ a <=> $ b) @ list2;
un article présenté par Sarah Miller


Disclaimer:Notre site n'est pas responsable du contenu de cet article. Webarticles est une ressource d'information gratuite.
Important: Cet article «Les listes et les tableaux» a été traduit par un logiciel automatique. Nous nous sentons désolés pour les fautes d'orthographe que mai ont eu lieu. Nous vous remercions de votre compréhension.


Online: 270 users browsing the articles directory