Ich bin doch noch nicht ganz fertig mit der Aufgabe.
Mein @prio kann doch mehrere identische Werte enthalten.
Das Testprogramm:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
#!/usr/bin/perl
use strict;
use 5.010;
use warnings;
# Feldwertigkeit, Priorität absteigend
my $best = [qw /29 20 31 5 18 36 17 3 16 9 27 32
25 35 11 10 23 4 26 12 24 30 6 15
13 2 21 19 14 33 22 7 34 8 1 28/];
# dieses Array nach Haeufigkeit und
# darin jeweils nach @best sortieren
my @prio = qw/7 1 12 3 4 17 7 7 3 25 33 4 29 7 12 1 3/;
# erwartetes Ergebnis @rang: 7 3 4 12 1 29 17 25 33
my %prio_hash;
for my $key (@prio)
{
( my $copy = $key ) =~ tr/0-9//cd;
$prio_hash{$copy}=$key
}
my (@folge,$elm);
for ( @$best )
{
$elm=delete($prio_hash{$_});
push(@folge,$elm) if(defined($elm));
}
print "\n";
print "Das ist \@prio : @prio\n";
print "\n";
print "Sortiert nach \@best: @folge\n";
print "\n";
# auffuellen nach @prio
my @best_prio;
for (@folge) {
for my $i (@prio) {
push @best_prio, $_ if($i == $_)
}
}
print "\@best_prio : @best_prio\n";
print "\n";
my $erg =code(\@best_prio);
my @rang=sort ordne keys %$erg;
print "\@rang nach Häufigkeit: @rang\n";
print "\n";
# ++++++++++++++++++++++++++++++++++++++++++
sub ordne {
$$erg{$b} <=> $$erg{$a}
}
print "\n";
sub code {
my $woerter = shift;
my %zaehler;
foreach ( @$woerter ) {
$zaehler{$_}++;
}
return \%zaehler
}
Ich bekomme die gewünschte Sortierung nicht hin, vermutlich, weil der Hash in sub code seine Sortierung erzwingt.
Danke.