Quelle est la différence entre grep et map dans Perl?
En Perl deux grep
et map
prendre une expression et une liste, et d'évaluer l'expression pour chaque élément de la liste.
Quelle est la différence entre les deux?
source d'informationauteur Nathan Fellman | 2009-02-22
Vous devez vous connecter pour publier un commentaire.
grep
renvoie les éléments de la liste originale qui correspondent à l'expression, tandis quemap
retourne le résultat de l'expression appliquée à chaque élément de la liste originale.Le premier exemple imprime tous les impair d'éléments de la liste, tandis que le second exemple imprime un 0 ou 1 selon que l'élément correspondant est bizarre ou pas.
Je trouve qu'il est utile de penser à penser à
grep()
etmap()
dans leur forme la plus générale:grep()
est un filtre: il retourne le sous-ensemble des éléments de la LISTE pour le BLOC renvoie la valeur true.map()
est une fonction de mappage: envoyer une valeur à partir de la LISTE de BLOC et BLOC renvoie une liste de 0 ou plusieurs valeurs; l'ensemble de tous ces appels à BLOC sera l'ultime liste retournée parmap()
.map
applique une fonction à tous les éléments dans une liste et retourne le résultat.grep
renvoie tous les éléments dans une liste qui évalue à true quand une fonction est appliquée.Une autre chose au sujet
grep
: dans un contexte scalaire, il vous indique le nombre d'éléments qu'il trouve. Cela peut être utile si vous ne voulez pas vraiment d'une seconde liste, mais vous voulez savoir combien d'objets d'un certain type, il y a des.Edit: Depuis que l'OP a demandé dans un commentaire, je dois dire que vous pouvez utiliser
map
dans un contexte scalaire de la même manière. Le point n'est pas quegrep
est le seul des deux qui peut le faire, mais qu'il est parfois utile de le faire avecgrep
.Pense grep comme la carte avec un filtre. carte itère et fournit une occasion de faire quelque chose avec chaque élément. Par exemple, ces deux lignes sont équivalentes:
De même, ces deux sont équivalentes:
grep offre la possibilité d'insérer un conditionnel, et devient donc un filtre.
Facétieusement: grep donne son bloc un contexte scalaire, la carte donne son bloc un contexte de liste. (Et BLOC foreach LISTE donne son bloc de contexte vide.)