[SP-pm] grep e map
Thiago Rondon
thiago at aware.com.br
Sun May 29 13:24:43 PDT 2011
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
More information about the SaoPaulo-pm
mailing list