Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Indices dans une chaine des clefs d'un hash

5 réponses
Avatar
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.

5 réponses

Avatar
Laurent Wacrenier
aarg écrit:
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;

Avatar
dcd
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

Avatar
Laurent Wacrenier
aarg écrit:
@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[$_]}} ();


Avatar
dcd
Laurent Wacrenier <lwa@ teaser . fr> wrote in message news:...

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


super classe :)
Merci beaucoup !

Avatar
Scetbon Cyril
aarg wrote:
Laurent Wacrenier <lwa@ teaser . fr> wrote in message news:...

@def = grep { defined $dico{$ligne[$_]}} ();
j'aurais plutôt fait:


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


super classe :)
Merci beaucoup !