4 votes

Vérifier si un tableau et un hachage sont vides ou non

J'ai un tableau et un hash. Je veux juste vérifier si les deux sont vides ou non.

J'ai trouvé ci-dessous deux méthodes pour vérifier cela. N'hésitez pas à me suggérer la méthode la plus appropriée.

#!/usr/bin/perl

use strict; use warnings;
use Data::Dumper;

my @a = qw/a b c/; 
print Dumper(\@a);

my %b = (1 => "Hi");
print Dumper(\%b);

@a = ();
%b = ();

#Method 1
if(!@a && !%b){
    print "Empty\n";
} else {
    print "Not empty\n";
}

#Method 2
if(!scalar @a && !scalar keys %b){
    print "Empty\n";
} else {
    print "Not empty\n";
}

Dans ce cas, soit les deux seraient vides, soit les deux auraient une certaine valeur.

4voto

Dave Mitchell Points 593

Pour savoir si un hachage ou un tableau est vide,

  • Vide du hachoir : (%hash) y (keys %hash) lorsqu'ils sont utilisés dans un contexte booléen, sont également optimisés en interne, et ce depuis perl 5.28.0. Ils se contentent tous deux d'examiner le hachage pour vérifier qu'il n'est pas interdit et d'évaluer une valeur vraie ou fausse. Avant cela, c'était beaucoup plus complexe, et cela changeait au fil des versions, c'est-à-dire que (keys %hash) mai auraient été plus rapides, mais ce n'est plus un problème.
  • Vide du tableau : @array dans un contexte scalaire a toujours été efficace, et vous dira si le tableau est vide.

3voto

ikegami Points 133140

Array

Utilice @a dans un contexte scalaire.

Exemples :

say @a ? "not empty" : "empty";

@a 
   or die( "At least one value is required" );

my $num_elements = @a;

Hash

Utilice %h o keys( %h ) dans un contexte scalaire.

Si le code doit être exécuté sur d'anciennes versions de Perl, vous voulez keys( %hash ) porque %h était inefficace avant 5.26 .

Exemples :

say %h ? "not empty" : "empty";   # Slower before 5.26

say keys( %h ) ? "not empty" : "empty";

%h                                # Slower before 5.26
   or die( "At least one element is required" );

keys( %h )
   or die( "At least one element is required" );

my $has_elements = %h;            # Slower before 5.26

my $num_elements = %h;            # 5.26+

my $num_elements = keys( %h );

Notez que !@a y !scalar @a sont identique depuis ! impose déjà un contexte scalaire. Il en va de même pour !scalar keys %b y !keys %b .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X