diokhan 1 Denunciar mensagem Publicado 28 de Maio de 2010 boas, vamos imaginar que temos o array @array1[1,2,3,4,5] e o @array2[3,6,7,8,9], eu quero comparar os dois arrays e quando devolvo o valor fica algo do género @array3[1,2,3,4,5,6,7,8,9]. como o 3 esta nos dois arrays não se repete, só apanha os valores diferentes e adiciona no novo array. como posso fazer esta comparação? existe já alguma função para o fazer? ou tenho de fazer a mão? estou a ler a documentação do perldoc mas agradeço se alguém puder dar uma luz um tutorial ou assim para ler e ajudar ...Join the dark side...and get a free cookie... Partilhar esta mensagem Ligação para a mensagem Partilhar noutros sites
Rui Carlos 348 Denunciar mensagem Publicado 29 de Maio de 2010 Mas afinal queres comparar os arrays, ou fazer a união? A união parece-me bastante simples, percorres o segundo array, e se o elemento não existir no primeiro, adicionas-lo ao primeiro array. Rui Carlos Gonçalves Partilhar esta mensagem Ligação para a mensagem Partilhar noutros sites
diokhan 1 Denunciar mensagem Publicado 31 de Maio de 2010 eu queria tipo, comparar antes de unir, se já existe não adiciona se não existe adiciona, neste momento já esta feito este ciclo a funcionar, não sei se foi a melhor forma que arranjei mas funcionou. ...Join the dark side...and get a free cookie... Partilhar esta mensagem Ligação para a mensagem Partilhar noutros sites
diokhan 1 Denunciar mensagem Publicado 31 de Maio de 2010 se eu quiser fazer algo do genero, comparar os arrays, os valores iguais entre os dois array adiciono para um novo array, e nos arrays de origem apago esse valor, ficando assim com 3 arrays, o novo com os valores que coincidem entre os dois arrays de origem, e os dois arrays de origem onde os valores sao unicos. é da mesma forma simples? e uso o pop() ou o shift() para apagar os valores do array? neste momento tenho assim a funcionar bem: while ($k <= $sizeRuthia){ if( $graphDataOkutanii[0][$k] ~~ @graphDataRuthia ){ }else{ push @{$graphDataRuthia[0][$l]}, $graphDataOkutanii[0][$k][0], $graphDataOkutanii[0][$k][1], $graphDataOkutanii[0][$k][2], $graphDataOkutanii[0][$k][3], $graphDataOkutanii[0][$k][4], $graphDataOkutanii[0][$k][5], $graphDataOkutanii[0][$k][6], $graphDataOkutanii[0][$k][7], $graphDataOkutanii[0][$k][8], $graphDataOkutanii[0][$k][9], $graphDataOkutanii[0][$k][10]; $k++; $l++; } } com este código apenas insere num array os valores iguais ...Join the dark side...and get a free cookie... Partilhar esta mensagem Ligação para a mensagem Partilhar noutros sites
Rui Carlos 348 Denunciar mensagem Publicado 5 de Junho de 2010 Não sei se existe algum método melhor do que com pops e afins, mas seria o que utilizaria (mas a minha experiência em Perl não é grande...). No entanto, esse teu código parece-me bastante complexo, e esperaria encontrar algo bem mais simples. Rui Carlos Gonçalves Partilhar esta mensagem Ligação para a mensagem Partilhar noutros sites
falco 33 Denunciar mensagem Publicado 7 de Junho de 2010 Sim código que ele colocou é gibberish Perl... Uma solução seria: #!/usr/bin/perl use strict; use warnings; my @A = (1,2,3,4,5); my @B = (3,6,7,8,9); # juntar os arrays de uma só vez # evita ciclos mas requer memória caso os arrays sejam grandes my @C = (@A, @B); my %Presentes; foreach my $el (@C) { if(!exists $Presentes{$el}) { #ainda não tinha encontrado este $Presentes{$el} = 1; } } @C = keys %Presentes; Ou então pode utilizar o http://search.cpan.org/~jfitz/List-Uniq-0.12/lib/List/Uniq.pm Partilhar esta mensagem Ligação para a mensagem Partilhar noutros sites