Question

Rendons cela très facile. Ce que je veux:

@array = qw/one two one/;
my @duplicates = duplicate(@array);
print "@duplicates"; # This should now print 'one'.

Comment imprimer les valeurs en double d'un tableau / hachage?

Était-ce utile?

La solution

sub duplicate {
    my @args = @_;
    my %items;
    for my $element(@args) {
        $items{$element}++;
    }
    return grep {$items{<*>} > 1} keys %items;
}

Autres conseils

# assumes inputs can be hash keys
@a = (1, 2, 3, 3, 4, 4, 5);

# keep count for each unique input
%h = ();
map { $h{<*>}++  } @a;

# duplicate inputs have count > 1
@dupes = grep { $h{<*>} > 1 } keys %h;

# should print 3, 4
print join(", ", sort @dupes), "\n";

La version très commentée et très lisible de ce que vous voulez faire:


sub duplicate {
   my %value_hash;
   foreach my $val (@_) {
     $value_hash{$val} +=1;
   }
   my @arr;
   while (my ($val, $num) = each(%value_hash)) {
     if ($num > 1) {
        push(@arr, $val)
     }
   }
  return @arr;
}

Cela peut être considérablement réduit, mais je l’ai volontairement laissé verbeux pour que vous puissiez suivre.

Je ne l'ai pas testé, alors faites attention à mes fautes de frappe.

Utilisez un dictionnaire, mettez la valeur dans la clé et le nombre dans la valeur.

Ah, je viens de remarquer que vous avez étiqueté en tant que perl

while ([...]) {
 $hash{[dbvalue]}++
}

Dans la question, la question non spécifiée est l'ordre dans lequel les doublons doivent être renvoyés.

Je peux penser à plusieurs possibilités: ne vous en faites pas; par ordre de première / deuxième / dernière occurrence dans la liste d'entrée; triés.

Je vais jouer au golf!

sub duplicate {
    my %count;
    grep $count{

Je vais jouer au golf!

<*>}++, @_; } @array = qw/one two one/; my @duplicates = duplicate(@array); print "@duplicates"; # This should now print 'one'. # or if returning *exactly* 1 occurrence of each duplicated item is important sub duplicate { my %count; grep ++$count{

Je vais jouer au golf!

<*>} == 2, @_; }
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top