Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

diokhan

perl array comparaçao

Mensagens Recomendadas

diokhan

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 :thumbsup:


...Join the dark side...and get a free cookie...

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Rui Carlos

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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
diokhan

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

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

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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
falco

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

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.