Flávio, 2011/5/29 "Flávio R. Lopes" <[email protected]>
> 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! > Não é bem "estar associado". Ambas as funções irão usar um bloco de código para manipular , um a um, os elementos do array de entrada, e irão produzir um array de saída. A diferença é que: - o grep vai usar o resultado do bloco para testar se o elemento (do array de entrada) irá entrar no array de saída ou não; - enquanto que o map vai usar o resultado do bloco ao invés do elemento (do array de entrada), no array de saída. Eu montei dois exemplos praticamente idênticos, um com grep[1] e outro com map[2], recomendo que você execute os dois e tente entender a diferença no resultado. []s, Alexei [1] https://github.com/russoz/perltests/blob/master/test-grep.pl [2] https://github.com/russoz/perltests/blob/master/test-map.pl > > 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: [email protected] > 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: [email protected] > L<http://mail.pm.org/mailman/listinfo/saopaulo-pm> > =end disclaimer > > -- Alexei "RUSSOZ" Znamensky [russoz_gmail_com] [russoz.wordpress.com] [www.flickr.com/photos/alexeiz] [ https://github.com/russoz] Only love / Can bring the rain / That makes you yearn to the sky
=begin disclaimer Sao Paulo Perl Mongers: http://sao-paulo.pm.org/ SaoPaulo-pm mailing list: [email protected] L<http://mail.pm.org/mailman/listinfo/saopaulo-pm> =end disclaimer
