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 :

vérifier si un scalaire est dans une un tableau


Sujet :

Langage Perl

  1. #1
    Membre à l'essai
    Inscrit en
    Mai 2006
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 25
    Points : 10
    Points
    10
    Par défaut vérifier si un scalaire est dans une un tableau
    Bonjour,
    je cherche a vérifier si un scalaire ($a) est inclus dans mon tableau (@tab), j'ai l'intention de creer une boucle pour faire le travail
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    for (@tab) {
      if ($tab[$_] eq $a) {print " $a est présent \n ";}
    }
    Mais existe t'il une fonctione qui permet de vérifier cela plus rapidement?

    Merci pour votre aide

  2. #2
    Membre expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    Points : 3 166
    Points
    3 166
    Par défaut
    Plus rapidement, je ne sais pas ...

    De façon différente, certes !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (grep { $_ == $a } @tab) { print "$a (numerique) est dans le tableau\n"; }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (grep { $_ eq $a } @tab) { print "$a (chaine) est dans le tableau\n"; }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $indices = grep { $tab[$_] == $a } (0..$#tab);
    $,= ", ";
    print "$a (numerique) est dans le tableau aux indices :";
    print @indices;
    print "\n";
    Voire même en créant un hash indicé par les valeurs du tableau et en faisant un if (exists (%hash{$a})) ...

  3. #3
    Membre chevronné
    Avatar de Woufeil
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    1 076
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 1 076
    Points : 2 004
    Points
    2 004
    Par défaut
    Bonjour,

    Oui, tu peux faire ça avec la fonction grep, que tu peux utiliser comme ceci dans ton cas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (grep {$_ eq $a} @tab)
    Cette fonction renverra true si elle trouve $a dans @tab, false sinon (chaque valeur de la liste est affectée à $_ en fait, comme pour une boucle foreach).

    €dit : je suis pas assez rapide

  4. #4
    Membre à l'essai
    Inscrit en
    Mai 2006
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 25
    Points : 10
    Points
    10
    Par défaut
    Vous etres vraiement rapide,

    Donc apparement aucune fonction n'est dédié à cela

    Si je fonctionne sous Windows, est il possible possible d'écrire un script avec la fonction grep?
    Merci

    €dit :

  5. #5
    Membre expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    Points : 3 166
    Points
    3 166
    Par défaut
    Citation Envoyé par STEPH69000
    Si je fonctionne sous Windows, est il possible possible d'écrire un script avec la fonction grep?
    Oui, car à part son nom, cette fonction n'a RIEN à voir avec celle que l'on peut trouver dans les shell UNIX.

    C'est une fonction interne à Perl, et donc aussi portable que le reste.

    Bon courage.

  6. #6
    Membre à l'essai
    Inscrit en
    Mai 2006
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 25
    Points : 10
    Points
    10
    Par défaut
    merci bien,
    je vais utiliser grep

  7. #7
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Y a un peu plus rapide que le grep :
    D'abord si tu te poses souvent la question pour un tableau donné qui est assez gros, ça vaut le coup d'optimiser ça en faisant un hash associé et en utilisant exists().
    Sinon plutôt que d'utiliser grep qui parcourra toujours le tableau en entier même si le premier élément du tableau était celui que tu cherchais tu peux utiliser List::Util::first() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    sub is_in {
      my ($elt, $arref) = @_;
      return defined( first( {$elt eq $_} @$arref ) );
    }
    --
    Jedaï

Discussions similaires

  1. [Google Sheets] Vérifier si cellule active est dans une range spécifique
    Par Beaudelicius dans le forum APIs Google
    Réponses: 1
    Dernier message: 21/03/2015, 10h06
  2. Réponses: 5
    Dernier message: 08/11/2010, 13h42
  3. [DATA] Vérifier si une valeur est dans une table sans PROC SQL
    Par Filippo dans le forum SAS Base
    Réponses: 5
    Dernier message: 02/12/2009, 11h05
  4. Réponses: 0
    Dernier message: 15/11/2009, 17h40
  5. Appel de methode dont le nom est dans une variable
    Par osopardo dans le forum Langage
    Réponses: 1
    Dernier message: 24/11/2005, 20h56

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