Re: [Rio-pm] Percorrendo array

2013-01-29 Por tôpico Daniel de Oliveira Mantovani
O ".." não cria uma lista temporária, então você não precisa do
"while" no código abaixo.

09:09 < GabrielVieira> mantovani: "In the current implementation, no
temporary array is created when the range operator is used as the
expression in foreach loops"

GabrielVieira++

2013/1/29 Daniel de Oliveira Mantovani :
> 2013/1/12 Thiago Glauco :
>> 1-> de onde sua função tirou o @data?
>>
>> mas faça isso:
>>
>> my $i = 0;
>> while($i <= $#data) {
>> $i = 1 if $data[$i] eq $gi;
>> ...
>>
>
> Thiago, seu código é incompatível com o do autor acima.
>
>
>> Evite usar labels.
> Porque labels é uma má prática em Software Engineer  ? Label é uma
> feature poderosa que a linguagem oferece.
>
> sub array_find_position{$g=shift;return$_ if $f[$_]==$g for 0..$# }
>
> Se a lista for muito grande,
>
> sub array_find_position{$g=shift;$i=0;return$i if $f[$i]==$g while $i<=$# }
>
> []'s
>
>>
>> regards.
>>
>>
>> Em Sáb, 2013-01-12 às 20:37 +, Aureliano Guedes escreveu:
>>> Era sim, mas resolvi tomar outro metodo.
>>>
>>> sub array_find_position{
>>> my $gi = shift;
>>> my $position = 0;
>>> LINE: foreach (@data){
>>> if ($_ eq $gi){
>>>         last LINE;
>>>   }
>>> else{
>>> $position++;
>>> }
>>> }
>>> return $position;
>>> }
>>>
>>>
>>> > From: bla...@gmail.com
>>> > Date: Sat, 12 Jan 2013 18:20:16 -0200
>>> > To: rio-pm@pm.org
>>> > Subject: Re: [Rio-pm] Percorrendo array
>>> >
>>> > perl -E '@array=(1..10); for(my $i = 0; $i < 10; $i
>>> ++){ if($array[$i]
>>> > == 2){ $i = 5} if($array[$i] == 7) {$i = 10} say $array[$i]}'
>>> >
>>> > Tipo isso?
>>> >
>>> > 2013/1/12 Tiago Peczenyj :
>>> > > nao use foreach. use for ou while p indice e altere-o qdo quiser p
>>> avancar
>>> > > ou voltar
>>> > >
>>> > > Em 12/01/2013 15:53, "Aureliano Guedes" 
>>> escreveu:
>>> > >>
>>> > >> Ola Monges,
>>> > >>
>>> > >> Me surgiu uma duvida nesse momento.
>>> > >>
>>> > >> Imagine que temos um array de 10 posições:
>>> > >> my @a = qw(0 1 2 3 4 5 6 7 8 9);
>>> > >>
>>> > >> Então este array esta em um loop, no caso um foreach:
>>> > >>
>>> > >> foreach my $i (@a){
>>> > >> ...
>>> > >> }
>>> > >>
>>> > >> Mas eu quero que se o valor dessa posição seja 6, por exemplo, o
>>> array
>>> > >> volte para segunda posição.
>>> > >>
>>> > >> Não sei se minha pergunta ficou estranha ou difícil de entender,
>>> mas como
>>> > >> eu faria isso??
>>> > >>
>>> > >> ___
>>> > >> Rio-pm mailing list
>>> > >> Rio-pm@pm.org
>>> > >> http://mail.pm.org/mailman/listinfo/rio-pm
>>> > >
>>> > >
>>> > > ___
>>> > > Rio-pm mailing list
>>> > > Rio-pm@pm.org
>>> > > http://mail.pm.org/mailman/listinfo/rio-pm
>>> > ___
>>> > Rio-pm mailing list
>>> > Rio-pm@pm.org
>>> > http://mail.pm.org/mailman/listinfo/rio-pm
>>>
>>> ___
>>> Rio-pm mailing list
>>> Rio-pm@pm.org
>>> http://mail.pm.org/mailman/listinfo/rio-pm
>>
>>
>> ___
>> Rio-pm mailing list
>> Rio-pm@pm.org
>> http://mail.pm.org/mailman/listinfo/rio-pm
>
>
> -dom
>
> --
>
> IBM - Business Analytics Optimization Consultant
> Daniel Mantovani +5511 8538-9897
> XOXO



-- 

-dom

--

IBM - Business Analytics Optimization Consultant
Daniel Mantovani +5511 8538-9897
XOXO
___
Rio-pm mailing list
Rio-pm@pm.org
http://mail.pm.org/mailman/listinfo/rio-pm


Re: [Rio-pm] Percorrendo array

2013-01-29 Por tôpico Daniel de Oliveira Mantovani
2013/1/12 Thiago Glauco :
> 1-> de onde sua função tirou o @data?
>
> mas faça isso:
>
> my $i = 0;
> while($i <= $#data) {
> $i = 1 if $data[$i] eq $gi;
> ...
>

Thiago, seu código é incompatível com o do autor acima.


> Evite usar labels.
Porque labels é uma má prática em Software Engineer  ? Label é uma
feature poderosa que a linguagem oferece.

sub array_find_position{$g=shift;return$_ if $f[$_]==$g for 0..$# }

Se a lista for muito grande,

sub array_find_position{$g=shift;$i=0;return$i if $f[$i]==$g while $i<=$# }

[]'s

>
> regards.
>
>
> Em Sáb, 2013-01-12 às 20:37 +, Aureliano Guedes escreveu:
>> Era sim, mas resolvi tomar outro metodo.
>>
>> sub array_find_position{
>> my $gi = shift;
>> my $position = 0;
>> LINE: foreach (@data){
>> if ($_ eq $gi){
>> last LINE;
>>   }
>> else{
>> $position++;
>> }
>> }
>> return $position;
>> }
>>
>>
>> > From: bla...@gmail.com
>> > Date: Sat, 12 Jan 2013 18:20:16 -0200
>> > To: rio-pm@pm.org
>> > Subject: Re: [Rio-pm] Percorrendo array
>> >
>> > perl -E '@array=(1..10); for(my $i = 0; $i < 10; $i
>> ++){ if($array[$i]
>> > == 2){ $i = 5} if($array[$i] == 7) {$i = 10} say $array[$i]}'
>> >
>> > Tipo isso?
>> >
>> > 2013/1/12 Tiago Peczenyj :
>> > > nao use foreach. use for ou while p indice e altere-o qdo quiser p
>> avancar
>> > > ou voltar
>> > >
>> > > Em 12/01/2013 15:53, "Aureliano Guedes" 
>> escreveu:
>> > >>
>> > >> Ola Monges,
>> > >>
>> > >> Me surgiu uma duvida nesse momento.
>> > >>
>> > >> Imagine que temos um array de 10 posições:
>> > >> my @a = qw(0 1 2 3 4 5 6 7 8 9);
>> > >>
>> > >> Então este array esta em um loop, no caso um foreach:
>> > >>
>> > >> foreach my $i (@a){
>> > >> ...
>> > >> }
>> > >>
>> > >> Mas eu quero que se o valor dessa posição seja 6, por exemplo, o
>> array
>> > >> volte para segunda posição.
>> > >>
>> > >> Não sei se minha pergunta ficou estranha ou difícil de entender,
>> mas como
>> > >> eu faria isso??
>> > >>
>> > >> ___
>> > >> Rio-pm mailing list
>> > >> Rio-pm@pm.org
>> > >> http://mail.pm.org/mailman/listinfo/rio-pm
>> > >
>> > >
>> > > ___
>> > > Rio-pm mailing list
>> > > Rio-pm@pm.org
>> > > http://mail.pm.org/mailman/listinfo/rio-pm
>> > ___
>> > Rio-pm mailing list
>> > Rio-pm@pm.org
>> > http://mail.pm.org/mailman/listinfo/rio-pm
>>
>> ___
>> Rio-pm mailing list
>> Rio-pm@pm.org
>> http://mail.pm.org/mailman/listinfo/rio-pm
>
>
> ___
> Rio-pm mailing list
> Rio-pm@pm.org
> http://mail.pm.org/mailman/listinfo/rio-pm


-dom

--

IBM - Business Analytics Optimization Consultant
Daniel Mantovani +5511 8538-9897
XOXO
___
Rio-pm mailing list
Rio-pm@pm.org
http://mail.pm.org/mailman/listinfo/rio-pm


Re: [Rio-pm] Percorrendo array

2013-01-12 Por tôpico Thiago Glauco
1-> de onde sua função tirou o @data?

mas faça isso:

my $i = 0;
while($i <= $#data) {
$i = 1 if $data[$i] eq $gi;
...

Evite usar labels.

regards.


Em Sáb, 2013-01-12 às 20:37 +, Aureliano Guedes escreveu:
> Era sim, mas resolvi tomar outro metodo.
> 
> sub array_find_position{
> my $gi = shift;
> my $position = 0;
> LINE: foreach (@data){
> if ($_ eq $gi){
> last LINE;
>   }
> else{
> $position++;
> }
> }
> return $position;
> } 
> 
> 
> > From: bla...@gmail.com
> > Date: Sat, 12 Jan 2013 18:20:16 -0200
> > To: rio-pm@pm.org
> > Subject: Re: [Rio-pm] Percorrendo array
> > 
> > perl -E '@array=(1..10); for(my $i = 0; $i < 10; $i
> ++){ if($array[$i]
> > == 2){ $i = 5} if($array[$i] == 7) {$i = 10} say $array[$i]}'
> > 
> > Tipo isso?
> > 
> > 2013/1/12 Tiago Peczenyj :
> > > nao use foreach. use for ou while p indice e altere-o qdo quiser p
> avancar
> > > ou voltar
> > >
> > > Em 12/01/2013 15:53, "Aureliano Guedes" 
> escreveu:
> > >>
> > >> Ola Monges,
> > >>
> > >> Me surgiu uma duvida nesse momento.
> > >>
> > >> Imagine que temos um array de 10 posições:
> > >> my @a = qw(0 1 2 3 4 5 6 7 8 9);
> > >>
> > >> Então este array esta em um loop, no caso um foreach:
> > >>
> > >> foreach my $i (@a){
> > >> ...
> > >> }
> > >>
> > >> Mas eu quero que se o valor dessa posição seja 6, por exemplo, o
> array
> > >> volte para segunda posição.
> > >>
> > >> Não sei se minha pergunta ficou estranha ou difícil de entender,
> mas como
> > >> eu faria isso??
> > >>
> > >> ___
> > >> Rio-pm mailing list
> > >> Rio-pm@pm.org
> > >> http://mail.pm.org/mailman/listinfo/rio-pm
> > >
> > >
> > > ___
> > > Rio-pm mailing list
> > > Rio-pm@pm.org
> > > http://mail.pm.org/mailman/listinfo/rio-pm
> > ___
> > Rio-pm mailing list
> > Rio-pm@pm.org
> > http://mail.pm.org/mailman/listinfo/rio-pm
> 
> ___
> Rio-pm mailing list
> Rio-pm@pm.org
> http://mail.pm.org/mailman/listinfo/rio-pm


___
Rio-pm mailing list
Rio-pm@pm.org
http://mail.pm.org/mailman/listinfo/rio-pm


Re: [Rio-pm] Percorrendo array

2013-01-12 Por tôpico Tiago Peczenyj
mas vc vai retornar o ultimo elemento se não encontrar o valor desejado?

Eu vejo 2 problemas na sua abordagem:

1 - vc não precisa do last LINE, de fato apenas last seria suficiente
mas vc poderia colocar um return $position no lugar e retornar undef
ou -1 (ou die "nao encontrei") como caso default.

2- vc pode usar a subrotina first do pacote List::Util (built in)

use List::Util qw(first);

my @a = (1,2,9,3,4);

print first { $a[$_] == 9 } 0.. scalar @a;

para ser mais sucinto vc poderia usar

first_index do List::MoreUtils (cpan)

2013/1/12 Aureliano Guedes :
> Era sim, mas resolvi tomar outro metodo.
>
> sub array_find_position{
> my $gi = shift;
> my $position = 0;
> LINE: foreach (@data){
> if ($_ eq $gi){
> last LINE;
>   }
> else{
> $position++;
> }
> }
> return $position;
> }
>
>> From: bla...@gmail.com
>> Date: Sat, 12 Jan 2013 18:20:16 -0200
>> To: rio-pm@pm.org
>> Subject: Re: [Rio-pm] Percorrendo array
>
>>
>> perl -E '@array=(1..10); for(my $i = 0; $i < 10; $i++){ if($array[$i]
>> == 2){ $i = 5} if($array[$i] == 7) {$i = 10} say $array[$i]}'
>>
>> Tipo isso?
>>
>> 2013/1/12 Tiago Peczenyj :
>> > nao use foreach. use for ou while p indice e altere-o qdo quiser p
>> > avancar
>> > ou voltar
>> >
>> > Em 12/01/2013 15:53, "Aureliano Guedes" 
>> > escreveu:
>> >>
>> >> Ola Monges,
>> >>
>> >> Me surgiu uma duvida nesse momento.
>> >>
>> >> Imagine que temos um array de 10 posições:
>> >> my @a = qw(0 1 2 3 4 5 6 7 8 9);
>> >>
>> >> Então este array esta em um loop, no caso um foreach:
>> >>
>> >> foreach my $i (@a){
>> >> ...
>> >> }
>> >>
>> >> Mas eu quero que se o valor dessa posição seja 6, por exemplo, o array
>> >> volte para segunda posição.
>> >>
>> >> Não sei se minha pergunta ficou estranha ou difícil de entender, mas
>> >> como
>> >> eu faria isso??
>> >>
>> >> ___
>> >> Rio-pm mailing list
>> >> Rio-pm@pm.org
>> >> http://mail.pm.org/mailman/listinfo/rio-pm
>> >
>> >
>> > ___
>> > Rio-pm mailing list
>> > Rio-pm@pm.org
>> > http://mail.pm.org/mailman/listinfo/rio-pm
>> ___
>> Rio-pm mailing list
>> Rio-pm@pm.org
>> http://mail.pm.org/mailman/listinfo/rio-pm
>
> ___
> Rio-pm mailing list
> Rio-pm@pm.org
> http://mail.pm.org/mailman/listinfo/rio-pm



-- 
Tiago B. Peczenyj
Linux User #405772

http://about.me/peczenyj
___
Rio-pm mailing list
Rio-pm@pm.org
http://mail.pm.org/mailman/listinfo/rio-pm


Re: [Rio-pm] Percorrendo array

2013-01-12 Por tôpico Aureliano Guedes

Era sim, mas resolvi tomar outro metodo.

sub array_find_position{
my $gi = shift;
my $position = 0;
LINE: foreach (@data){
if ($_ eq $gi){
last LINE;
  }
else{
$position++;
}
}
return $position;
} 

> From: bla...@gmail.com
> Date: Sat, 12 Jan 2013 18:20:16 -0200
> To: rio-pm@pm.org
> Subject: Re: [Rio-pm] Percorrendo array
> 
> perl -E '@array=(1..10); for(my $i = 0; $i < 10; $i++){ if($array[$i]
> == 2){ $i = 5} if($array[$i] == 7) {$i = 10} say $array[$i]}'
> 
> Tipo isso?
> 
> 2013/1/12 Tiago Peczenyj :
> > nao use foreach. use for ou while p indice e altere-o qdo quiser p avancar
> > ou voltar
> >
> > Em 12/01/2013 15:53, "Aureliano Guedes"  escreveu:
> >>
> >> Ola Monges,
> >>
> >> Me surgiu uma duvida nesse momento.
> >>
> >> Imagine que temos um array de 10 posições:
> >> my @a = qw(0 1 2 3 4 5 6 7 8 9);
> >>
> >> Então este array esta em um loop, no caso um foreach:
> >>
> >> foreach my $i (@a){
> >> ...
> >> }
> >>
> >> Mas eu quero que se o valor dessa posição seja 6, por exemplo, o array
> >> volte para segunda posição.
> >>
> >> Não sei se minha pergunta ficou estranha ou difícil de entender, mas como
> >> eu faria isso??
> >>
> >> ___
> >> Rio-pm mailing list
> >> Rio-pm@pm.org
> >> http://mail.pm.org/mailman/listinfo/rio-pm
> >
> >
> > ___
> > Rio-pm mailing list
> > Rio-pm@pm.org
> > http://mail.pm.org/mailman/listinfo/rio-pm
> ___
> Rio-pm mailing list
> Rio-pm@pm.org
> http://mail.pm.org/mailman/listinfo/rio-pm
  ___
Rio-pm mailing list
Rio-pm@pm.org
http://mail.pm.org/mailman/listinfo/rio-pm

Re: [Rio-pm] Percorrendo array

2013-01-12 Por tôpico Blabos de Blebe
perl -E '@array=(1..10); for(my $i = 0; $i < 10; $i++){ if($array[$i]
== 2){ $i = 5} if($array[$i] == 7) {$i = 10} say $array[$i]}'

Tipo isso?

2013/1/12 Tiago Peczenyj :
> nao use foreach. use for ou while p indice e altere-o qdo quiser p avancar
> ou voltar
>
> Em 12/01/2013 15:53, "Aureliano Guedes"  escreveu:
>>
>> Ola Monges,
>>
>> Me surgiu uma duvida nesse momento.
>>
>> Imagine que temos um array de 10 posições:
>> my @a = qw(0 1 2 3 4 5 6 7 8 9);
>>
>> Então este array esta em um loop, no caso um foreach:
>>
>> foreach my $i (@a){
>> ...
>> }
>>
>> Mas eu quero que se o valor dessa posição seja 6, por exemplo, o array
>> volte para segunda posição.
>>
>> Não sei se minha pergunta ficou estranha ou difícil de entender, mas como
>> eu faria isso??
>>
>> ___
>> Rio-pm mailing list
>> Rio-pm@pm.org
>> http://mail.pm.org/mailman/listinfo/rio-pm
>
>
> ___
> Rio-pm mailing list
> Rio-pm@pm.org
> http://mail.pm.org/mailman/listinfo/rio-pm
___
Rio-pm mailing list
Rio-pm@pm.org
http://mail.pm.org/mailman/listinfo/rio-pm


Re: [Rio-pm] Percorrendo array

2013-01-12 Por tôpico Tiago Peczenyj
nao use foreach. use for ou while p indice e altere-o qdo quiser p avancar
ou voltar
Em 12/01/2013 15:53, "Aureliano Guedes"  escreveu:

>  Ola Monges,
>
> Me surgiu uma duvida nesse momento.
>
> Imagine que temos um array de 10 posições:
> my @a = qw(0 1 2 3 4 5 6 7 8 9);
>
> Então este array esta em um loop, no caso um foreach:
>
> foreach my $i (@a){
> ...
> }
>
> Mas eu quero que se o valor dessa posição seja 6, por exemplo, o array
> volte para segunda posição.
>
> Não sei se minha pergunta ficou estranha ou difícil de entender, mas como
> eu faria isso??
>
> ___
> Rio-pm mailing list
> Rio-pm@pm.org
> http://mail.pm.org/mailman/listinfo/rio-pm
>
___
Rio-pm mailing list
Rio-pm@pm.org
http://mail.pm.org/mailman/listinfo/rio-pm

[Rio-pm] Percorrendo array

2013-01-12 Por tôpico Aureliano Guedes

Ola Monges,

Me surgiu uma duvida nesse momento.

Imagine que temos um array de 10 posições:
my @a = qw(0 1 2 3 4 5 6 7 8 9);

Então este array esta em um loop, no caso um foreach:

foreach my $i (@a){
...
}

Mas eu quero que se o valor dessa posição seja 6, por exemplo, o array volte 
para segunda posição.

Não sei se minha pergunta ficou estranha ou difícil de entender, mas como eu 
faria isso??
  ___
Rio-pm mailing list
Rio-pm@pm.org
http://mail.pm.org/mailman/listinfo/rio-pm