Thread Ein Array nach einem anderen Array sortieren (11 answers)
Opened by hugenyn at 2011-08-27 21:36

hugenyn
 2011-08-29 23:09
#151952 #151952
User since
2010-10-05
65 Artikel
BenutzerIn

user image
Ich bin doch noch nicht ganz fertig mit der Aufgabe.

Mein @prio kann doch mehrere identische Werte enthalten.

Das Testprogramm:

Code: (dl )
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.

View full thread Ein Array nach einem anderen Array sortieren