Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

diokhan

perl array comparaçao

Recommended Posts

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...

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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...

Share this post


Link to post
Share on other 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...

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.