OVH Cloud OVH Cloud

optimisation code

3 réponses
Avatar
paul POULAIN
Bonjour,

j'ai une variable qui a la forme suivante :
$var = "X;Y;Z;Y;R;D;F;"
Bref, des valeurs séparées par un séparateur. Une même valeur peut s'y
retrouver plusieurs fois.
La variable peut être longue (plusieurs milliers de valeurs)

Je veux la transformer pour avoir :
$hash{X} = 1
$hash{Y} = 2
$hash{Z} = 1
Bref, un hachage ou chaque valeur est en clef et le nombre de fois en
valeur.

Spontanément je ferais :
my @arr = split /;/,$var;
my %hash;
foreach (@arr) {
$hash{$_}++;
}

Est-ce le moyen le plus performant ?

Question corollaire :
si je veux enlever 1 occurence d'une valeur, quelle est la méthode la plus
rapide :
$enlever = 'Y';
$var =~ s/$enlever;//;
?

Merchi
--
Paul

3 réponses

Avatar
Denis -esp2008-
Bonjour,

Bon, il semblerait que je recommence à accéder à ce groupe normalement,
même si on s'en fout un peu pour moi c'est une bonne nouvelle.


$var = "X;Y;Z;Y;R;D;F;"


N'y a-t-il qu'un caractère à chaque fois?


Quel type d'optimisation est souhaité (utilisation du proc, de la
mémoire, simplicité/maintenabilité du code, autre)?


--
Denis

Avatar
paul POULAIN
Denis -esp2008- wrote:

Bonjour,
Bon, il semblerait que je recommence à accéder à ce groupe normalement,
même si on s'en fout un peu pour moi c'est une bonne nouvelle.
$var = "X;Y;Z;Y;R;D;F;"
N'y a-t-il qu'un caractère à chaque fois?

Non, c'est même plutôt un nombre qu'un caractère. Mais ca n'est pas obligé.

C'est juste une chaine courte (disons <10 caractères)

Quel type d'optimisation est souhaité (utilisation du proc, de la
mémoire, simplicité/maintenabilité du code, autre)?
Utilisation du proc, c'est un traitement qui sera fait des milliers de fois,

donc c'est ca qui est critique.
--
Paul


Avatar
JacK
Utiliser exists delete pour le hash?