Schrift
[thread]9193[/thread]

Arrayelemente zählen

Leser: 1


<< >> 5 Einträge, 1 Seite
MartinR
 2007-07-16 11:47
#78521 #78521
User since
2004-06-17
305 Artikel
BenutzerIn
[default_avatar]
Hi,

ich habe eine Liste z.B. wie folgende:

@Liste = qw( 9 9 9 1 1 2 2 2 2 3 3 3 3 4 4 );

Nun möchte ich die Anzahl der Vorkommen zählen. Die Zahlen kommen immer gruppiert vor! Eine Vermischung der Zahlen (also sowas: 9 5 4 9 4 3) ist nicht möglich.

Als Ergebnis stelle ich mir ein Array of Hashes vor. Die Reihenfolge der Zahlen im Ergebnis soll aber die selbe sein wie in der Ausgangsliste.

@Ergebnis = ( {9=>'3'}, {1=>'2'}, {2=>'4'}, {3=>'4'}, {4=>'2'} );

Wie löst man sowas am geschicktesten?
renee
 2007-07-16 12:10
#78522 #78522
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
use Tie::IxHash;

my @array = qw( 9 9 9 1 1 2 2 2 2 3 3 3 3 4 4 );

tie my %hash, 'Tie::IxHash';
$hash{$_}++ for @array;
while( my ($key,$value) = each %hash ){
    print $key, " -- ", $value,"\n";
}
untie %hash;


ungetestet...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Ronnie
 2007-07-16 12:15
#78523 #78523
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#!/usr/bin/perl

use strict;
use warnings;

use Data::Dumper;

my @list = qw( 9 9 9 1 1 2 2 2 2 3 3 3 3 4 4 );
my %count;

$count{$_}++ for @list;
print Dumper \%count;

my @unique;
$unique[-1] != $_ and push @unique, $_ for @list;
print Dumper \@unique;

my @set = map { { $_ => $count{$_} } } @unique;
print Dumper \@set;

Die Variante von renee mit CPAN:Tie::IxHash ist eleganter - außerdem erspart sie dir eine Warnung. Aber so geht es auch zu Fuss.

EDIT: Wobei man die Warnung auch so los wird:
Code (perl): (dl )
(!$unique[-1] or $unique[-1] != $_) and push @unique, $_ for @list;
\n\n

<!--EDIT|Ronnie|1184573970-->
MartinR
 2007-07-16 12:42
#78524 #78524
User since
2004-06-17
305 Artikel
BenutzerIn
[default_avatar]
Danke Euch beiden - ich habe mich für renee's Lösung entschieden. Funzt auch ...
lichtkind
 2007-07-16 14:35
#78525 #78525
User since
2004-03-22
5681 Artikel
ModeratorIn + EditorIn
[Homepage]
user image
es gibt auch module dafür, mehr dazu in dem artikel den ich grad schreibe :)
Wiki:Tutorien in der Wiki, mein zeug:
kephra, baumhaus, garten, gezwitscher

Es beginnt immer mit einer Entscheidung.
<< >> 5 Einträge, 1 Seite



View all threads created 2007-07-16 11:47.