[SP-pm] grep e map

"Flávio R. Lopes" flavio.lopes at links.inf.br
Sun May 29 15:31:47 PDT 2011


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 em pm.org
>   L<http://mail.pm.org/mailman/listinfo/saopaulo-pm>
> =end disclaimer
>
>    

-------------- Pr?xima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://mail.pm.org/pipermail/saopaulo-pm/attachments/20110529/d3ea9814/attachment.html>


More information about the SaoPaulo-pm mailing list