Ragazzo_Programmatore Posted March 13, 2006 at 09:53 PM Report #18152 Posted March 13, 2006 at 09:53 PM Ja devia voltas a sites e ainda nao percebi certos pedaços de codigo deste programa. Os pedaços de código que nao entendo estao assinalados com um '*'. Vá dêm ai uma maozinha. Obrigado. 😉 #!/usr/bin/perl @list = (1,5,3,9,7); %array1 = ('a' => 'zwsdre', 'b' => 'ghtrry', 'bb' => 'zwsdr'); %array2 = ('a' => 5, 'b' => 3, 'bb' => 4) #imprime, na 1ª linha, após o tab a string com os elementos de @list ordenados e separados por ',' print "1:\t",join(',',sort @list),"\n"; #imprime, na 2ª linha, após o tab a string com os valores de %array1 ordenados e separados por ',' print "2:\t",join(',',sort values %array1),"\n"; print "3:\t",join(',',sort values %array2),"\n"; #imprime, na 4ª linha, após o tab a string com as chaves de %array1 ordenados e separados por ',' print "4:\t",join(',',sort keys %array1),"\n"; print "5:\t",join(',',sort keys %array2),"\n"; #imprime, na 6ª linha, após o tab a string com as chaves de %array1 ordenadas, pelo valor respectivo e separados por ',' print "6:\t",join(',',sort {$array1{$a} cmp $array1{$b}} keys %array1),"\n"; * nao entendo o que isto faz, nem $array1{$a} nem o cmp, resumindo n entendo o print #imprime, na 7ª linha, após o tab a string com as chaves de %array2 ordenadas inversamente, pelo valor respectivo e separados por ',' print "7:\t",join(',',sort f keys %array2),"\n"; #imprime, na 8ª linha, após o tab a string com as chaves de %array2 ordenadas, pelo valor respectivo e separados por ',' print "8:\t",join(',',sort g keys %array2),"\n"; #em PERL um subrotina é declarada com a palavra sub seguida do nome da mesma sub f{ * Estas duas funcoes o que fazem precisamente? return $array2{$b} <=> $array2{$a}; #ordena inversamente pelo valores das chaves. } sub g{ return $array2{$a} <=> $array2{$b}; }
freesumo Posted March 14, 2006 at 01:29 PM Report #18205 Posted March 14, 2006 at 01:29 PM Hmmm... Isto é uma HASH, tem uma serie de KEY->VALUE PAIRS. %array1 = ('a' => 'zwsdre', 'b' => 'ghtrry', 'bb' => 'zwsdr'); Isto é o que tu não entendes... print "6:\t",join(',',sort {$array1{$a} cmp $array1{$b}} keys %array1),"\n"; Vamos ao principal... sort {$array1{$a} cmp $array1{$b}} keys %array1 Isto é uma sorting by value, ou seja tás a ordenar os 'zwsdre', 'ghtrry', etc... O cmp é um string comparison operator, 0 if equal, 1 if $a greater, -1 if $b greater O <=> é um numeric comparison operator, idem... O $a e o $b são variaveis globais próprias da função sort. O join é só uma maneira de apresentar os valores finais. Tens aqui outra maneira de apresentar o resultado. for $key(sort {$array1{$a} cmp $array1{$b}} keys %array1){ print "$key - $array1{$key}\n"; } Isto é uma subrotina, que faz algum do trabalho necessário ao sorting mas com o operador numerico <=> sub g{ return $array1{$a} <=> $array1{$b}; } Vamos trocar <=> pelo string operator cmp. sub g{ return $array1{$a} cmp $array1{$b}; } E agora chamas a subrotina... print "6:\t",join(',',sort g keys %array1),"\n"; Ou: for $key(sort g keys %array1){ print "$key - $array1{$key}\n"; } cyas 😉
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now