Indices dans une chaine des clefs d'un hash

Le
dcd
Bonjour,

C'est un problème a priori facile et j'ai une solution mais je la
trouve un peu lourde

Il y a un hash : %dico
une liste qui contient des mots : @ligne (lecture ligne à ligne d'un
fichier)
Je veux : une liste @def qui contient les indices des éléments de
@ligne qui sont dans (keys %dico)
Comme ça je peux obtenir : @dico{@ligne[@def]}

Je ne suis pas sur qu'utiliser des slices comme ça soit très bon au
niveau performance.

Le but de la manip c'est de traduire (d'ou la variable %dico ) des
mots d'une chaîne par d'autres, en gardant le sens d'apparition dans
la chaîne et en éliminant ceux qui ne sont pas definis dans le dico.

J'ai besoin de @def par la suite car les mots que je traduit
définissent des colonnes et je ne veux garder que les colonnes
correspondant à une entête définie.

Voici ce que je fais :

$ind =0
foreach $mot (@ligne) {
push (@def, $ind) if exists $dico{$mot} ;
$ind++;
}

J'ai retrouvé cette technique dans le cookbook mais j'ai l'impression
qu'il y a un autre moyen ? Comme : Trouver instantanément les indices
de @ligne dans keys %dico ..

Merci d'avance pour votre aide et|ou vos conseils .


david.
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Laurent Wacrenier
Le #427390
aarg
Il y a un hash : %dico
une liste qui contient des mots : @ligne (lecture ligne à ligne d'un
fichier)
Je veux : une liste @def qui contient les indices des éléments de
@ligne qui sont dans (keys %dico)
Comme ça je peux obtenir : @dico{@ligne[@def]}


Quelque chose comme ça :

@def = grep { defined $dico{$_} } @ligne;

dcd
Le #427179
Bonjour ,

Quelque chose comme ça :

@def = grep { defined $dico{$_} } @ligne;


ahh oui c'est bien ! Mais ca ne me renvoie que les elements de @lignes
et pas leurs indices ...

Y a t-il un moyen d'obtenir une liste (@def) contenant les incices des
elements d'une liste (@ligne) dans une autre liste (keys %dico) ?

ou bien, si je passe par votre commande, je cherche les indices des
elements de @def dans @ligne.

Merci de vos conseils

Laurent Wacrenier
Le #427178
aarg
@def = grep { defined $dico{$_} } @ligne;


ahh oui c'est bien ! Mais ca ne me renvoie que les elements de @lignes
et pas leurs indices ...

Y a t-il un moyen d'obtenir une liste (@def) contenant les incices des
elements d'une liste (@ligne) dans une autre liste (keys %dico) ?


@def = grep { defined $dico{$ligne[$_]}} ();


dcd
Le #427067
Laurent Wacrenier

@def = grep { defined $dico{$ligne[$_]}} ();


super classe :)
Merci beaucoup !

Scetbon Cyril
Le #431727
aarg wrote:
Laurent Wacrenier
@def = grep { defined $dico{$ligne[$_]}} ();
j'aurais plutôt fait:


@def = grep { defined $dico{$ligne[$_]}} ();


super classe :)
Merci beaucoup !



Publicité
Poster une réponse
Anonyme