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

Linuxer
 2011-08-27 21:53
#151879 #151879
User since
2006-01-27
3875 Artikel
HausmeisterIn

user image
Hi,

Du kannst auch die Liste der Wertigkeiten in einen Hash umwandeln ( Wertigkeit => Position ) und dann mit Hilfe dieses Hashs einen neuen Array aufbauen.

Code (perl): (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
#! /usr/bin/perl
# vim:ts=4 sw=4 sts=4 et nu fdc=3:
use strict;
#use warnings;

my @order = qw(
                9 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
);

my @items = qw( 
    7 12M 3 4 17CG 25 33
);

# prepare order hash
my %order;
{
    my $position = 0;
    $order{$_}=$position++ for @order;
}

my @ordered_items;
for my $element ( @items ) {

    # clean element from non-digits
    ( my $copy = $element ) =~ tr/0-9//cd;

    if ( exists $order{$copy} ) {
        $ordered_items[ $order{$copy} ] = $element;
    }
    else {
        warn "No position defined for '$element'. skipped ...\n";
    }
}

# clean result array of undefined values
@ordered_items = grep {defined} @ordered_items;

print "@ordered_items\n";


__END__


Der Code berücksichtigt derzeit keine doppelten Elemente im zu sortierenden @items.


edit: Variablen sprechender umbenannt ($i => $position, $e => element)

Last edited: 2011-08-27 22:21:26 +0200 (CEST)
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!

View full thread Ein Array nach einem anderen Array sortieren