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

hugenyn
 2011-08-30 17:50
#151964 #151964
User since
2010-10-05
65 Artikel
BenutzerIn

user image
O.k. - ich habe eine Lösung gefunden.

Danke allerseits.


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
#!/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 $erg =code(\@prio);

my (@ar, $i, $k);

$k=1;

do {

my @et;

while ( (my $s, my $w) = each %$erg ) {

push @et, $s if $w eq $k

}

if (@et > 1) {

unshift @ar, @{&reihe(\@et)}

} else {

unshift @ar, @et

}

$k++; $i+=$k;

}

while ($i < @prio);

print "Ergebnis in \@ar ist: @ar\n";

print "\n";


# ++++++++++++++++++++++++++++++++++++++++++

sub reihe {
my $er=shift;
my %items_hash;
for my $key (@$er)
{
( my $copy = $key ) =~ tr/0-9//cd;
$items_hash{$copy}=$key;
}

my @folge;
my $elm;
for ( @$best )
{
$elm=delete($items_hash{$_});
push(@folge,$elm) if(defined($elm));
}

return \@folge
}

sub code {
my $woerter = shift;
my %zaehler;

foreach ( @$woerter ) {
$zaehler{$_}++;
}

return \%zaehler
}

Last edited: 2011-08-30 21:04:15 +0200 (CEST)

View full thread Ein Array nach einem anderen Array sortieren