IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Perl Discussion :

Quelle différence entre liste, array et hash ?


Sujet :

Langage Perl

  1. #1
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    mai 2007
    Messages
    11 519
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : mai 2007
    Messages : 11 519
    Points : 50 358
    Points
    50 358
    Par défaut Quelle différence entre liste, array et hash ?
    Bonjour,

    Une question existentielle dont je n'arrive pas à percevoir la réponse claire.

    D'après ma 1ere compréhension
    • un array (préfixé par @) est une table de 'choses' et on accède à ces 'choses' par leur index (nombre variant de 0 à n) $array[12] par exemple
    • un hash (préfixé par %) est aussi une table de 'choses' et on accède à ces 'choses' par leur clé $hash['cle'] par exemple


    Par contre, j'ai un peu de mal à comprendre les listes. Qu'est ce que c'est et quelle différence par rapport à un tableau ?

    Merci d'avance pour vos réponses
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  2. #2
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : mai 2012
    Messages : 3 612
    Points : 12 465
    Points
    12 465
    Billets dans le blog
    1
    Par défaut
    Rien à redire à ta distinction entre tableau (ou array) et une table de hachage (hash). Une liste est une collection de choses n'ayant pas de nom et n'ayant pas non plus d'adresse mémoire utilisable. Une liste est donc par essence éphémère puisqu'elle n'est pas stockée sous la forme d'une variable. Une liste est aussi par essence non mutable (elle ne peut pas être une lvalue). A part cela, il y a peu de différence entre une liste et un tableau et un bon nombre des fonctions (sort, map, grep, etc.) sont utilisables de la même manière sur des listes et des tableaux. Mais les fonctions qui modifient un tableau ne sont généralement pas utilisables ssur une liste, sauf éventuellement à créer une autre liste.

    Evalué dans un contexte scalaire, un tableau retourne le nombre d'éléments du tableau alors qu'une liste retourne le dernier élément de la liste.

    Correction, mise à jour et précisions complémentaires: j'avais indiqué par erreur que la fonction shift pouvait être utilisée sur une liste, mais ce n'est pas le cas (ne serait-ce que parce que la fonction shift modifie le tableau en retirant le premier élément, et une liste n'est pas modifiable, les fonctions pop et splice ne sont pas utilisables sur une liste pour la même raison). (Ma seule excuse pour cette erreur est que j'ai écrit la réponse ci-dessus dans le train pour aller bosser, sans documentation à ma disposition ni moyen de tester.) En revanche, il est possible de récupérer le premier élément d'une liste avec une syntaxe ressemblant à celle utilisée avec un tableau:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my $c = (2, 3, 4)[0]; #c vaut maintenant 2
    Cette possibilité peut être très utile. Par exemple la fonction split divise une chaîne de caractère en une liste de sous-chaînes (en utilisant le premier argument comme séparateur). Souvent on affecte la liste de sous-chaînes produite à un tableau:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my @mots = split / /, "Le contrepèterie est l'art de décaler les sons.";
    Le split génère une liste de huit sous-chaînes que l'on affecte ensuite au tableau @mots. Il arrive toutefois assez souvent, dans ce genre de split, que l'on ait besoin de seulement une ou deux des sous-chaînes générées par le split. On peut alors faire ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my ($mot2, $mot5) = @mots[1, 4]; # le "sigil" à employer ici est bien @ (et non $) parce que l'on récupère non pas un scalaire, mais une collection de deux scalaires
    Mais on peut aussi le faire directement en une seule instruction plus concise:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my ($mot2, $mot5)  = (split / /, "Le contrepèterie est l'art de décaler les sons.")[1, 4];

  3. #3
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    mai 2007
    Messages
    11 519
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : mai 2007
    Messages : 11 519
    Points : 50 358
    Points
    50 358
    Par défaut
    OK, merci pour ta réponse, cela s'éclaircit

    Cela mérite peut être une entrée dans la FAQ (pour les grands débutants) ?
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  4. #4
    Modérateur
    Avatar de ggnore
    Profil pro
    Inscrit en
    juillet 2004
    Messages
    2 472
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : juillet 2004
    Messages : 2 472
    Points : 4 029
    Points
    4 029
    Par défaut
    Genre une liste, ça serait (keys (%data1), keys(%data2)) dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    foreach my $row (keys (%data1), keys(%data2))
    ?

    On peut faire un tableau explicitement en faisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my @array = (keys(%data1), keys(%data2));
    Je n'avais pas conscience de cette notion de liste qui, comme mieux dit plus haut, ne semble être qu'un tableau temporaire.
    Toutes les vertus des hommes se perdent dans l’intérêt comme les fleuves se perdent dans la mer.
    N'oubliez pas de consulter les FAQ Linux et les cours et tutoriels Linux

  5. #5
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : mai 2012
    Messages : 3 612
    Points : 12 465
    Points
    12 465
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par ram-0000 Voir le message
    Cela mérite peut être une entrée dans la FAQ (pour les grands débutants) ?
    OK, je vais vérifier qu'il n'y a rien sur le sujet et, si c'est bien le cas, préparer une nouvelle FAQ. C'est un point qui trouble souvent les débutants (je me suis moi-même fait avoir plus d'une fois quand j'ai commencé le Perl) et même parfois des personnes plus expérimentées, et c'est une distinction très importante.

    Note que j'ai apporté une petite correction à ce que j'avais écrit, ainsi que des précisions complémentaires.

  6. #6
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    avril 2004
    Messages
    19 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : avril 2004
    Messages : 19 793
    Points : 499 017
    Points
    499 017
    Par défaut
    Tu peux préparer des QR, pas forcément une nouvelle FAQ . Et je les rajouterais dans la FAQ.

  7. #7
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : mai 2012
    Messages : 3 612
    Points : 12 465
    Points
    12 465
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par djibril Voir le message
    Tu peux préparer des QR, pas forcément une nouvelle FAQ . Et je les rajouterais dans la FAQ.
    Oui, Djibril, après avoir regardé hier soir la FAQ existante, je pensais effectivement à juste une ou deux questions/réponses à ajouter à la fin de la partie de la FAQ relative aux listes. J'espère faire cela ce weekend.

  8. #8
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : mai 2012
    Messages : 3 612
    Points : 12 465
    Points
    12 465
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par ram-0000 Voir le message
    Cela mérite peut être une entrée dans la FAQ (pour les grands débutants) ?
    C'est fait, deux nouvelles entrées ont été ajoutées dans la partie de la FAQ relative aux listes.

  9. #9
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    mai 2007
    Messages
    11 519
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : mai 2007
    Messages : 11 519
    Points : 50 358
    Points
    50 358
    Par défaut
    Citation Envoyé par Lolo78 Voir le message
    C'est fait, deux nouvelles entrées ont été ajoutées dans la partie de la FAQ relative aux listes.
    Super boulot, je ne sais pas si les 2 nouvelle entrées sont de toi ou s'il s'agit d'un travail collaboratif mais félicitations, maintenant c'est beaucoup plus clair.
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

+ Répondre à la discussion
Cette discussion est résolue.
Signaler un problème

Discussions similaires

  1. [Débutant] Quelle différence entre une liste et une bibliothèque ?
    Par Casmer dans le forum SharePoint
    Réponses: 4
    Dernier message: 19/01/2015, 17h02
  2. Réponses: 67
    Dernier message: 16/12/2007, 13h41
  3. Quelles différences entre TDBGrid et TJvDBGrid ?
    Par bds2006 dans le forum Delphi
    Réponses: 2
    Dernier message: 12/06/2006, 14h35
  4. [Type Sql] Quelles différences entre ces bases ?
    Par wonderboy dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 16/03/2006, 09h38
  5. Quelle différence entre "réel simple" et "déc
    Par pyxosledisciple dans le forum Access
    Réponses: 2
    Dernier message: 11/01/2006, 11h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo