-+  Associazione
-+  Documenti
 |-  Modern Perl
 |-  Bibliografia
 |-  Articoli
 |-  Talk
 |-  Perlfunc
 |-  F.A.Q.
 |-  F.A.Q. iclp
-+  Eventi
-+  Community
-+  Blog
-+  Link
Corso di Perl



 


indietro

[44] Come stabilisco se due array o hash sono uguali?

Il codice di seguito riportato funziona per array ad un solo livello. Utilizza un confronto di stringhe e non distingue i valori indefiniti dalle stringhe vuote ma definite. Modificatelo se avete esigenze diverse.

     $sono_uguali = confronta_array(\@rane, \@rospi);
     sub confronta_array {
         my ($primo, $secondo) = @_;
         no warnings;  # zittisce le proteste di -w sugli undef
         return 0 unless @$primo == @$secondo;
         for (my $i = 0; $i < @$primo; $i++) {
             return 0 if $primo->[$i] ne $secondo->[$i];
         }
         return 1;
     }

Per le strutture multilivello, potreste voler ricorrere ad un approccio come il seguente. Utilizza il modulo CPAN FreezeThaw:

     use FreezeThaw qw(cmpStr);
     @a = @b = ( "questo", "quello", [ "ancora", "roba" ] );
     printf "'a' e 'b' contengono %s array\n",
         cmpStr(\@a, \@b) == 0
             ? "gli stessi"
             : "diversi";

Questo sistema funziona anche per il confronto degli hash. Qui di seguito sono mostrate due diverse risposte:

    use FreezeThaw qw(cmpStr cmpStrHard);
    %a = %b = ( "questo" => "quello", "extra" => [ "ancora", "roba" ] );
    $a{EXTRA} = \%b;
    $b{EXTRA} = \%a;
    printf "'a' e 'b' contengono %s hash\n",
        cmpStr(\%a, \%b) == 0 ? "gli stessi" : "diversi";
    printf "'a' e 'b' contengono %s hash\n",
        cmpStrHard(\%a, \%b) == 0 ? "gli stessi" : "diversi";

La prima risposta indica che entrambi gli hash contengono gli stessi dati, mentre la seconda indica il contrario. La scelta di quale sia per voi preferibile è lasciato come esercizio al lettore.

vedi in inglese

AUTORE E COPYRIGHT

Copyright (c) 1997, 1998, 1999, 2000, 2001 Tom Christiansen e Nathan Torkington. Tutti i diritti riservati.

Questa documentazione è libera; puoi ridistribuirla e/o modificarla secondo gli stessi termini applicati al Perl.

Indipendentemente dalle modalitè di distribuzione, tutti gli esempi di codice in questo file sono rilasciati al pubblico dominio. Potete, e siete incoraggiati a farlo, utilizzare il presente codice o qualunque forma derivata da esso nei vostri programmi per divertimento o per profitto. Un semplice commento nel codice che dia riconoscimento alle FAQ sarebbe cortese ma non è obbligatorio.

D:
Progetti e documenti in rilievo
Corso di Perl Progetto pod2it
D:
La ML di Perl.it
mongers@perl.it è la lista ufficiale di Perl Mongers Italia per porre quesiti di tipo tecnico, per rimanere aggiornato su meeting, incontri, manifestazioni e novità su Perl.it.
Iscriviti!
D:
Annunci Google