[SP-pm] grep e map

Renato Santos renato.cron at gmail.com
Sun May 29 15:35:58 PDT 2011


O map gera uma nova lista com o resultado que você retornou (percorrendo
cada item da[s] lista[s] que você passou)
e o grep retorna o conteudo original dependendo do resultando que você
retornou no código para cada um dos item[s].

Look this:

@quatroZeros = map { 0 } qw / a b c d/;

@vazio = grep { 0 } qw / a b c d/;
----------------------
@quatroUm = map { 1 } qw / a b c d/;

@abc_e_d = grep { 1 } qw / a b c d/;


2011/5/29 "Flávio R. Lopes" <flavio.lopes at links.inf.br>

>  Opa!...e aí Thiago?
>
> Então, pela sua explicação e juntando com o que li até agora, quando você
> diz que o grep está associado à uma condição, o map também não estaria? É
> isso que me confunde!
>
> Seguindo seu exemplo:
>
> map { BLOCO } LISTA;
> grep { BLOCO } LISTA;
>
> "BLOCO" não poderia ser uma "condição" em ambos os casos?
>
> Posso entender que *grep* trabalha me retornando os itens de uma lista
> INDIVIDUALMENTE, conforme atenderem a uma determinada condição?
> E que com o *map* eu manipulo as listas ?
>
>
>
> On 29-05-2011 17:24, Thiago Rondon wrote:
>
> On Sun, May 29, 2011 at 04:53:51PM -0300, "Flávio R. Lopes" wrote:
>
>
>  Boa tarde pessoal.
> Ainda não ficou claro para mim as diferenças entre map e grep.
> Andei lendo uma coisas por aí (inclusive em Perldoc), mas mesmo
> assim não consegui pegar os conceitos de forma clara.
>
> Alguém poderia me dar alguns exemplos (ou alguma documentação ou
> link) de quando usar um e outro?
>
>
>
>  Olá Flávio,
>
> Você pode pensar nos dois como um loop "foreach". No qual estas duas funções tem a habilidade de tornar o código mais compactado, o uso dos dois são:
>
> map { BLOCO } LISTA;
> grep { BLOCO } LISTA;
>
> "map" aplica um bloco (função) em todos os elementos da lista, e retorna o resultado. "grep" retorna todos os elementos da lista que o bloco executado (função) retorna verdadeiro.
>
> Ou seja, o "grep" poderia ser:
> @foo; foreach(@lista) { push (@foo,$_) if CONDIÇÃO };
>
> Que é o mesmo que:
> @foo = map { if (CONDIÇÃO) { $_ } } @lista;
>
> Que pode ser simplificado por:
> @foo = grep CONDIÇÃO, @lista;
>
> Ou seja, o uso do grep esta associado a uma condição. Vamos ilustrar com um exemplo prático, vamos supor que você tenha uma array com valores dos arquivos de um diretório.
>
> opendir(DIR, '/tmp');
> @arquivos = readdir(DIR);
>
> @diretorios = grep(-d, @arquivos);
>
> Neste exemplo, você vai ler todos os elementos da array @arquivos, porém irá ter na array @diretorios somente o que passar pela condicional (-d). Ou seja, os diretórios de DIR.
>
> Agora, por exemplo, você quer retornar todos os tamanho dos @arquivos. Veja, executar uma função e retornar o resultado:
>
> @tamanhos = map(-s, @arquivos);
>
> Espero que tenha ajudado.
>
> -Thiago Rondon
>
> =begin disclaimer
>    Sao Paulo Perl Mongers: http://sao-paulo.pm.org/
>  SaoPaulo-pm mailing list: SaoPaulo-pm at pm.org
>  L<http://mail.pm.org/mailman/listinfo/saopaulo-pm> <http://mail.pm.org/mailman/listinfo/saopaulo-pm>
> =end disclaimer
>
>
>
>
>
> =begin disclaimer
>   Sao Paulo Perl Mongers: http://sao-paulo.pm.org/
>  SaoPaulo-pm mailing list: SaoPaulo-pm at pm.org
>  L<http://mail.pm.org/mailman/listinfo/saopaulo-pm>
> =end disclaimer
>
>


-- 
Renato Santos
http://www.renatocron.com/blog/
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.pm.org/pipermail/saopaulo-pm/attachments/20110529/72004a08/attachment.html>


More information about the SaoPaulo-pm mailing list