Thread Präfixe aus Liste herausarbeiten (11 answers)
Opened by Philipp at 2012-01-30 22:06

FIFO
 2012-02-05 08:12
#155876 #155876
User since
2005-06-01
469 Artikel
BenutzerIn

user image
Guest Philipp
Allerdings sollte das Skript mind. 5mal über den Array laufen, sodass auch kürzere Prefixe erkannt werden.


Das kann man iterativ oder per Rekursion lösen, eine Variante mit temporärem Array ginge so (ungetestet):

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
use warnings;
use strict;

my @data = qw(
    # ...
);
my @new;
my @data_tmp = @data;

while (1) {
    my %test;
    @new = ();

    for my $item (@data_tmp) {
        next if $item !~ /^\d{2,}$/;
        my $suffix = chop($item);
        $test{$item}{$suffix}++;
    }

    for my $base (keys %test) {
        if (scalar(keys %{$test{$base}}) == 10) {
            push @new, $base;
        }
        else {
            push @new, $base.$_ for keys %{$test{$base}};
        }
    }
    last if $#new == $#data_tmp;
    @data_tmp = @new;
}

print "$_\n" for sort @new;


Allerdings wird die array-Kopie jedesmal neu erzeugt, was bei richtig großen arrays ineffizient ist.
Du musst auch folgendes bedenken: Nimm die Reihe
Code: (dl )
1
2
3
4
5
6
120
..
128
1290
..
1299


Die wird dann auf ein Element (12) reduziert. Willst Du das?
Everyone knows that debugging is twice as hard as writing a program in the first place. So if you're as clever as you can be when you write it, how will you ever debug it? -- Brian Kernighan: "The Elements of Programming Style"

View full thread Präfixe aus Liste herausarbeiten