[SP-pm] grep e map

Eden Cardim edencardim at gmail.com
Mon May 30 00:11:24 PDT 2011


>>>>> "Ulisses-IBIZ" == Ulisses-IBIZ  <ulisses em ibiz.com.br> writes:

    Ulisses-IBIZ> exemplo de grep x map
    Ulisses-IBIZ> ----------------------------------
    Ulisses-IBIZ> my @lista = ('a', 'b', 'c');                                      # o mesmo que @lista = qw/a b c/;
 
    Ulisses-IBIZ> my @lista_grep = grep { $_ eq  'c' } @lista;          # @lista_grep = ('c'); a condicao $_ eq  'c' somente eh verdadeira,
    Ulisses-IBIZ> obviamente, para o elemento 'c'
 
    Ulisses-IBIZ> my @lista_map = map { uc $_ } @lista;              # @lista_map = qw/A B C/; uppercase em todos os elementos
 
    Ulisses-IBIZ> my @impares = grep { $_ % 2 } qw/1 2 3 4 5 6 7 8 9/; #
    @impares = qw/1 3 5 7 9/; a expressao $_ % 2 eh o resto da divisao
    Ulisses-IBIZ> por 2 que da 1 (true) para os caras impares
 
    Ulisses-IBIZ> my @dobro = map { 2 * $_ } qw/1 2 3 4 5 6 7 8 9/;           # @dobro = qw/2 4 6 8 10 12 14 16 18/; dobra o valor de CADA
    Ulisses-IBIZ> elemento

Dá pra emular o comportamento do grep com map, talvez fique mais fácil
entender a diferença entre dois:

my @maior_que_cinco = grep { $_ > 5 } 1..10; # 6, 7, 8, 9, 10

my @maior_que_cinco = map { $_ > 5 ? $_ : () } 1..10; # 6, 7, 8, 9, 10

grep é só um caso bem comum de map, então tem uma sintaxe abreviada e
uma otimização no backend do perl, pra esse caso.

-- 
   Eden Cardim       Need help with your Catalyst or DBIx::Class project?
  Code Monkey                    http://www.shadowcat.co.uk/catalyst/
 Shadowcat Systems Ltd.  Want a managed development or deployment platform?
http://blog.edencardim.com/            http://www.shadowcat.co.uk/servers/
http://twitter.com/#!/edenc


More information about the SaoPaulo-pm mailing list