Hallo zusammen!
Ich stehe vor einer kleinen Herausforderung und kriege gerade den Dreh nicht so richtig hin ...
Gegeben ist eine sortierte Liste:
aa
aa
aa
bb
cc
cc
cc
dd
dd
ee
ee
ee
ff
Ich will jetzt die Anzahl der gleichen Elemente wissen(in diesem Beispielfall aa=3, bb=1, cc=3, dd=2, ee=3, ff=1). Genauso wie man es mit dem Shell-Kommando "uniq -c" machen könnte, allerdings in Perl.
Und genau hier stehe ich auf dem Schlauch, wie verarbeite ich die Daten und zähle und vergleiche sie dann. Nehme ich ein Array, einen Hash etc. pp.
Für einen gedanklichen Anstoß wäre ich dankbar!
Perl: mehrfach vorkommende Elemente in einer Liste zählen
Re: Perl: mehrfach vorkommende Elemente in einer Liste zählen
Code: Alles auswählen
#!/usr/bin/perl
use strict;
use warnings;
my @a = qw(
aa
aa
aa
bb
cc
cc
cc
dd
dd
ee
ee
ee
ff
);
my %h;
$h{$_}++ foreach (@a);
while (my ($k, $v) = each %h) {
print "$k=$v\n";
}
Code: Alles auswählen
$ perl test.pl
cc=3
ff=1
bb=1
dd=2
aa=3
ee=3
Re: Perl: mehrfach vorkommende Elemente in einer Liste zählen
@nepos: THX!
Da meine Perl-Kenntnisse inzwischen arg eingerostet sind, muss ich mich mit dem Konstrukt ersteinmal kurz auseinander setzen. Auf die Idee einen Array in einen Hash zählen zu lassen wäre ich so ad hoc nicht gekommen.
Da meine Perl-Kenntnisse inzwischen arg eingerostet sind, muss ich mich mit dem Konstrukt ersteinmal kurz auseinander setzen. Auf die Idee einen Array in einen Hash zählen zu lassen wäre ich so ad hoc nicht gekommen.
Re: Perl: mehrfach vorkommende Elemente in einer Liste zählen
Naja, eigentlich ganz einfach: über alle Array-Elemente laufen, das jeweilige Element als Key für den Hash benutzen und den Wert jedesmal um eins erhöhen. Die Ausgabe hätte man auch locker mit foreach schreiben können:
Code: Alles auswählen
foreach my $k (keys %h) {
print "$k=$h{$k}\n";
}