Comme tout le monde a déjà souligné votre premier problème est que qw()
est inapproprié pour établir cette matrice.
Il y a plusieurs façons de le faire correctement, je vais utiliser un tableau de hachage ici qui est l'option la plus verbeuse, il est assez facile de modifier la technique à la structure que vous choisissez.
@uniqarr = (
{ error => 0, goodrecordno => 6123, },
{ error => 0, goodrecordno => 6143, },
{ error => 1, goodrecordno => 10245, },
{ error => 1, goodrecordno => 10678, },
{ error => 1, goodrecordno => 10698, },
{ error => 2, goodrecordno => 16245, },
{ error => 2, goodrecordno => 16123, },
);
Ensuite, pour extraire chaque instance d'erreur avec le plus bas goodrecordno, nous pouvons faire ce qui suit.
Nous importons d'abord min de List :: Util. Ce module est le noyau Perl et ne nécessite pas de CPAN.
Ensuite, restructurez l'entrée @uniqarr. C'est beaucoup plus facile pour ce que nous voulons grouper par les valeurs d'erreur. Donc, by_error est un hachage de tableaux. La clé du hachage est la valeur d'erreur, le tableau contient toutes les valeurs goodrecordno.
Enfin, nous produisons la sortie désirée. Le bouclage à travers le hachage signifie que nous itérons sur chaque valeur d'erreur, triés pour fournir l'ordre de sortie correct. Ensuite, nous extrayons la valeur minimum goodrecordno. Ce qui laisse juste l'impression de la sortie.
use List::Util qw(min); # In core Perl, not CPAN
# Restructure input
my %by_error; # Hash with error as key, array of goodrecordno as value.
foreach (@uniqarr) {
push @{$by_error{$_->{error}}}, $_->{goodrecordno};
}
# Output as desired
foreach my $error (sort keys %by_error) {
my $min_no = min @{$by_error{$error}};
print "error $error goodrecordno:$min_no\n";
}
Hunh? S'il vous plaît gardez à l'esprit lors de l'affichage que Stack Overflow est destiné à être une alternative aux sites d'experts payants. L'utilisation de raccourcis cryptiques pour énoncer votre problème est peu susceptible d'aider quelqu'un à l'avenir. Le tableau s'appellera '@ uniqarr' et à moins que vous ne vouliez une clé appelée' 'goodrecord: 6123, '' (* avec * la virgule dans la clé) vous ne devriez pas mettre de virgules dans une liste 'qw()'. Qu'est-ce que "o/p"? *Sortie*?! Vous pourriez économiser beaucoup de confusion au prix de taper * 4 * caractères supplémentaires. – Axeman
"sans utiliser les modules CPAN"? Pourquoi? – Ether
Désolé patron ...! J'essayais d'apprendre à écrire chaque programme sans les modules cpan. Donc je le veux seulement sans eux bcoz (car) ils pourraient être simples en utilisant des modules cpan.Je veux apprendre la logique de base à partir de la base.Désolé pour l'o/p suivant A partir de maintenant, je vais tout écrire clairement. Merci pour les conseils et suggestions. – Sunny