Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Emmanuel Florac
Le Thu, 15 Sep 2005 06:06:02 +0200, Antoun a écrit :
De mémoire, il me semblait qu'il existait des fonctions natives pour les manipulations classiques de tableaux ou de hash, du genre
- rechercher une valeur et récupérer l'indice ou clé correspondant(e)
Il y a "grep" pour ça.
- dédoublonner les valeurs
Il suffit de "retourner" le tableau ou le hash, puis de le remettre à l'endroit :
my %h=(toto=>1, tata=>2, titi=>3, tete=>2 ); my %reverseh= map { $h{$_} => $_ } keys %h; my %uniqh = map {$_ => $h{$_} } values %reverseh ;
Pour un tableau c'est carrément très simple, il suffit de le copier dans un hash :
my @t=qw( 1 2 3 4 5 6 6 7 1);
my %h = map { $_ => 0 } @t;
Si on veut conserver les numéros d'ordre, on peut ajouter un compteur :
my @t=qw( 1 2 3 4 5 6 6 7 1); my $i=0; my %h = map { $_ => $i++ } @t;
# pour retrouver le tableau: my @uniqt; foreach ( keys %h) { $uniqt[$h{$_}]=$_ }
-- Si ça a l'air facile, c'est difficile. Si ça a l'air difficile, c'est carrément impossible. Si ça a l'air impossible, c'est un compilateur Ada. Théorème de Stockmayer.
Le Thu, 15 Sep 2005 06:06:02 +0200, Antoun a écrit :
De mémoire, il me semblait qu'il existait des fonctions natives pour les
manipulations classiques de tableaux ou de hash, du genre
- rechercher une valeur et récupérer l'indice ou clé correspondant(e)
Il y a "grep" pour ça.
- dédoublonner les valeurs
Il suffit de "retourner" le tableau ou le hash, puis de le remettre à
l'endroit :
my %h=(toto=>1, tata=>2, titi=>3, tete=>2 );
my %reverseh= map { $h{$_} => $_ } keys %h;
my %uniqh = map {$_ => $h{$_} } values %reverseh ;
Pour un tableau c'est carrément très simple, il suffit de le copier dans
un hash :
my @t=qw( 1 2 3 4 5 6 6 7 1);
my %h = map { $_ => 0 } @t;
Si on veut conserver les numéros d'ordre, on peut ajouter un compteur :
my @t=qw( 1 2 3 4 5 6 6 7 1);
my $i=0;
my %h = map { $_ => $i++ } @t;
# pour retrouver le tableau:
my @uniqt;
foreach ( keys %h) { $uniqt[$h{$_}]=$_ }
--
Si ça a l'air facile, c'est difficile. Si ça a l'air difficile, c'est
carrément impossible. Si ça a l'air impossible, c'est un compilateur
Ada.
Théorème de Stockmayer.
Le Thu, 15 Sep 2005 06:06:02 +0200, Antoun a écrit :
De mémoire, il me semblait qu'il existait des fonctions natives pour les manipulations classiques de tableaux ou de hash, du genre
- rechercher une valeur et récupérer l'indice ou clé correspondant(e)
Il y a "grep" pour ça.
- dédoublonner les valeurs
Il suffit de "retourner" le tableau ou le hash, puis de le remettre à l'endroit :
my %h=(toto=>1, tata=>2, titi=>3, tete=>2 ); my %reverseh= map { $h{$_} => $_ } keys %h; my %uniqh = map {$_ => $h{$_} } values %reverseh ;
Pour un tableau c'est carrément très simple, il suffit de le copier dans un hash :
my @t=qw( 1 2 3 4 5 6 6 7 1);
my %h = map { $_ => 0 } @t;
Si on veut conserver les numéros d'ordre, on peut ajouter un compteur :
my @t=qw( 1 2 3 4 5 6 6 7 1); my $i=0; my %h = map { $_ => $i++ } @t;
# pour retrouver le tableau: my @uniqt; foreach ( keys %h) { $uniqt[$h{$_}]=$_ }
-- Si ça a l'air facile, c'est difficile. Si ça a l'air difficile, c'est carrément impossible. Si ça a l'air impossible, c'est un compilateur Ada. Théorème de Stockmayer.
De mémoire, il me semblait qu'il existait des fonctions natives pour les manipulations classiques de tableaux ou de hash, du genre
- rechercher une valeur et récupérer l'indice ou clé correspondant(e)
Non.
- dédoublonner les valeurs
Non plus.
Ai-je rêvé ?
Oui.
Toutes ces fonctions n'ont rien de « classiques ». En fait leur implémentation optimale dépend beaucoup de la nature des données et de ce qu'on veut vraiment faire. Par exemple, une recherche ne se fait pas de la même manière si les valeurs dans un tableau sont ordonnées ou non.
Ceci étant, Perl permet très facilement de programmer ces fonctions de manière adaptée à chaque situation.
PS : Btw, si j'ai un tableau de clés et un tableau de valeurs, y a-t-il un moyen de les fusionner en un hash sans faire de boucle ?
De mémoire, il me semblait qu'il existait des fonctions natives pour
les manipulations classiques de tableaux ou de hash, du genre
- rechercher une valeur et récupérer l'indice ou clé correspondant(e)
Non.
- dédoublonner les valeurs
Non plus.
Ai-je rêvé ?
Oui.
Toutes ces fonctions n'ont rien de « classiques ». En fait leur
implémentation optimale dépend beaucoup de la nature des données et de
ce qu'on veut vraiment faire. Par exemple, une recherche ne se fait
pas de la même manière si les valeurs dans un tableau sont ordonnées
ou non.
Ceci étant, Perl permet très facilement de programmer ces fonctions de
manière adaptée à chaque situation.
PS : Btw, si j'ai un tableau de clés et un tableau de valeurs, y
a-t-il un moyen de les fusionner en un hash sans faire de boucle ?
De mémoire, il me semblait qu'il existait des fonctions natives pour les manipulations classiques de tableaux ou de hash, du genre
- rechercher une valeur et récupérer l'indice ou clé correspondant(e)
Non.
- dédoublonner les valeurs
Non plus.
Ai-je rêvé ?
Oui.
Toutes ces fonctions n'ont rien de « classiques ». En fait leur implémentation optimale dépend beaucoup de la nature des données et de ce qu'on veut vraiment faire. Par exemple, une recherche ne se fait pas de la même manière si les valeurs dans un tableau sont ordonnées ou non.
Ceci étant, Perl permet très facilement de programmer ces fonctions de manière adaptée à chaque situation.
PS : Btw, si j'ai un tableau de clés et un tableau de valeurs, y a-t-il un moyen de les fusionner en un hash sans faire de boucle ?
De mémoire, il me semblait qu'il existait des fonctions natives pour les manipulations classiques de tableaux ou de hash, du genre
- rechercher une valeur et récupérer l'indice ou clé correspondant(e)
Non.
- dédoublonner les valeurs
Non plus.
Ai-je rêvé ?
Oui.
Toutes ces fonctions n'ont rien de « classiques ».
elles sont dans PHP (ce doit d'ailleurs être la cause de ma méprise).
En fait leur implémentation optimale dépend beaucoup de la nature des données et de ce qu'on veut vraiment faire. Par exemple, une recherche ne se fait pas de la même manière si les valeurs dans un tableau sont ordonnées ou non.
OK
Ceci étant, Perl permet très facilement de programmer ces fonctions de manière adaptée à chaque situation.
PS : Btw, si j'ai un tableau de clés et un tableau de valeurs, y a-t-il un moyen de les fusionner en un hash sans faire de boucle ?
De mémoire, il me semblait qu'il existait des fonctions natives pour
les manipulations classiques de tableaux ou de hash, du genre
- rechercher une valeur et récupérer l'indice ou clé correspondant(e)
Non.
- dédoublonner les valeurs
Non plus.
Ai-je rêvé ?
Oui.
Toutes ces fonctions n'ont rien de « classiques ».
elles sont dans PHP (ce doit d'ailleurs être la cause de ma méprise).
En fait leur
implémentation optimale dépend beaucoup de la nature des données et de
ce qu'on veut vraiment faire. Par exemple, une recherche ne se fait
pas de la même manière si les valeurs dans un tableau sont ordonnées
ou non.
OK
Ceci étant, Perl permet très facilement de programmer ces fonctions de
manière adaptée à chaque situation.
PS : Btw, si j'ai un tableau de clés et un tableau de valeurs, y
a-t-il un moyen de les fusionner en un hash sans faire de boucle ?
De mémoire, il me semblait qu'il existait des fonctions natives pour les manipulations classiques de tableaux ou de hash, du genre
- rechercher une valeur et récupérer l'indice ou clé correspondant(e)
Non.
- dédoublonner les valeurs
Non plus.
Ai-je rêvé ?
Oui.
Toutes ces fonctions n'ont rien de « classiques ».
elles sont dans PHP (ce doit d'ailleurs être la cause de ma méprise).
En fait leur implémentation optimale dépend beaucoup de la nature des données et de ce qu'on veut vraiment faire. Par exemple, une recherche ne se fait pas de la même manière si les valeurs dans un tableau sont ordonnées ou non.
OK
Ceci étant, Perl permet très facilement de programmer ces fonctions de manière adaptée à chaque situation.
PS : Btw, si j'ai un tableau de clés et un tableau de valeurs, y a-t-il un moyen de les fusionner en un hash sans faire de boucle ?
Le Fri, 16 Sep 2005 07:06:56 +0200, Antoun a écrit :
donc en fait, il n'y a pas de fonction standard, mais on peut le faire sans boucle avec des map ou des grep...
Exactement!
-- A thing of beauty is a joy forever. J. Keats.
Ah! Singe débotté, hisse un jouet fort et vert! Marcel Bénabou.
Emmanuel Florac
Le Fri, 16 Sep 2005 09:25:54 +0200, Jacques Caron a écrit :
Un map ou un grep est une boucle (avec quelques extras intégrés).
Non, car l'ordre d'éxécution n'est pas prédéfini. Et il est possible que l'évaluation du map/grep soit "paresseuse", est-ce qu'un habitué de la programmation fonctionnelle pourrait infirmer ou confirmer?
-- Quis, quid, ubi, quibus auxiliis, cur, quomodo, quando
Le Fri, 16 Sep 2005 09:25:54 +0200, Jacques Caron a écrit :
Un map ou un grep est une boucle (avec quelques extras intégrés).
Non, car l'ordre d'éxécution n'est pas prédéfini. Et il est possible
que l'évaluation du map/grep soit "paresseuse", est-ce qu'un habitué de
la programmation fonctionnelle pourrait infirmer ou confirmer?
--
Quis, quid, ubi, quibus auxiliis, cur, quomodo, quando
Le Fri, 16 Sep 2005 09:25:54 +0200, Jacques Caron a écrit :
Un map ou un grep est une boucle (avec quelques extras intégrés).
Non, car l'ordre d'éxécution n'est pas prédéfini. Et il est possible que l'évaluation du map/grep soit "paresseuse", est-ce qu'un habitué de la programmation fonctionnelle pourrait infirmer ou confirmer?
-- Quis, quid, ubi, quibus auxiliis, cur, quomodo, quando
Le Fri, 16 Sep 2005 09:25:54 +0200, Jacques Caron a écrit :
Un map ou un grep est une boucle (avec quelques extras intégrés).
Non, car l'ordre d'éxécution n'est pas prédéfini. Et il est possible que l'évaluation du map/grep soit "paresseuse", est-ce qu'un habitué de la programmation fonctionnelle pourrait infirmer ou confirmer?
Dans les implémentations actuelles de Perl, l'ordre d'évaluation est défini (celui des éléments fournis) et l'évaluation n'est ni paresseuse (n'évaluer que si on en a besoin) ni retardée (n'évaluer qu'au moment où en a besion).
Dans l'absolu, tout cela peut changer... mais pas avant un bon moment à mon avis ;-)
-- Paul Gaborit - <http://perso.enstimac.fr/~gaborit/> Perl en français - <http://perl.enstimac.fr/>
Le Fri, 16 Sep 2005 09:25:54 +0200, Jacques Caron a écrit :
Un map ou un grep est une boucle (avec quelques extras intégrés).
Non, car l'ordre d'éxécution n'est pas prédéfini. Et il est possible
que l'évaluation du map/grep soit "paresseuse", est-ce qu'un habitué de
la programmation fonctionnelle pourrait infirmer ou confirmer?
Dans les implémentations actuelles de Perl, l'ordre d'évaluation est
défini (celui des éléments fournis) et l'évaluation n'est ni
paresseuse (n'évaluer que si on en a besoin) ni retardée (n'évaluer
qu'au moment où en a besion).
Dans l'absolu, tout cela peut changer... mais pas avant un bon moment
à mon avis ;-)
--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>
Le Fri, 16 Sep 2005 09:25:54 +0200, Jacques Caron a écrit :
Un map ou un grep est une boucle (avec quelques extras intégrés).
Non, car l'ordre d'éxécution n'est pas prédéfini. Et il est possible que l'évaluation du map/grep soit "paresseuse", est-ce qu'un habitué de la programmation fonctionnelle pourrait infirmer ou confirmer?
Dans les implémentations actuelles de Perl, l'ordre d'évaluation est défini (celui des éléments fournis) et l'évaluation n'est ni paresseuse (n'évaluer que si on en a besoin) ni retardée (n'évaluer qu'au moment où en a besion).
Dans l'absolu, tout cela peut changer... mais pas avant un bon moment à mon avis ;-)
-- Paul Gaborit - <http://perso.enstimac.fr/~gaborit/> Perl en français - <http://perl.enstimac.fr/>
Antoun
Dans les implémentations actuelles de Perl, l'ordre d'évaluation est défini (celui des éléments fournis) et l'évaluation n'est ni paresseuse (n'évaluer que si on en a besoin) ni retardée (n'évaluer qu'au moment où en a besion).
Dans l'absolu, tout cela peut changer... mais pas avant un bon moment à mon avis ;-)
et donc, est qu'un grep/map est plus performant qu'une boucle, ou bien c'est la même chose ?
Dans les implémentations actuelles de Perl, l'ordre d'évaluation est
défini (celui des éléments fournis) et l'évaluation n'est ni
paresseuse (n'évaluer que si on en a besoin) ni retardée (n'évaluer
qu'au moment où en a besion).
Dans l'absolu, tout cela peut changer... mais pas avant un bon moment
à mon avis ;-)
et donc, est qu'un grep/map est plus performant qu'une boucle, ou bien
c'est la même chose ?
Dans les implémentations actuelles de Perl, l'ordre d'évaluation est défini (celui des éléments fournis) et l'évaluation n'est ni paresseuse (n'évaluer que si on en a besoin) ni retardée (n'évaluer qu'au moment où en a besion).
Dans l'absolu, tout cela peut changer... mais pas avant un bon moment à mon avis ;-)
et donc, est qu'un grep/map est plus performant qu'une boucle, ou bien c'est la même chose ?
Mark Clements
Antoun wrote:
Dans les implémentations actuelles de Perl, l'ordre d'évaluation est défini (celui des éléments fournis) et l'évaluation n'est ni paresseuse (n'évaluer que si on en a besoin) ni retardée (n'évaluer qu'au moment où en a besion).
Dans l'absolu, tout cela peut changer... mais pas avant un bon moment à mon avis ;-)
et donc, est qu'un grep/map est plus performant qu'une boucle, ou bien c'est la même chose ? ¨
Je pense que c'est la même chose, mais ça depend sur l'algorithme. On peut toujours verifier avec Benchmark::Timer :)
Mark
Antoun wrote:
Dans les implémentations actuelles de Perl, l'ordre d'évaluation est
défini (celui des éléments fournis) et l'évaluation n'est ni
paresseuse (n'évaluer que si on en a besoin) ni retardée (n'évaluer
qu'au moment où en a besion).
Dans l'absolu, tout cela peut changer... mais pas avant un bon moment
à mon avis ;-)
et donc, est qu'un grep/map est plus performant qu'une boucle, ou bien
c'est la même chose ?
¨
Je pense que c'est la même chose, mais ça depend sur l'algorithme. On
peut toujours verifier avec Benchmark::Timer :)
Dans les implémentations actuelles de Perl, l'ordre d'évaluation est défini (celui des éléments fournis) et l'évaluation n'est ni paresseuse (n'évaluer que si on en a besoin) ni retardée (n'évaluer qu'au moment où en a besion).
Dans l'absolu, tout cela peut changer... mais pas avant un bon moment à mon avis ;-)
et donc, est qu'un grep/map est plus performant qu'une boucle, ou bien c'est la même chose ? ¨
Je pense que c'est la même chose, mais ça depend sur l'algorithme. On peut toujours verifier avec Benchmark::Timer :)