Thread Bestimmte array Elemente löschen (9 answers)
Opened by falke13 at 2011-05-24 09:12

clms
 2011-05-24 11:45
#149090 #149090
User since
2010-08-29
373 Artikel
BenutzerIn
[default_avatar]
2011-05-24T07:12:51 falke13
wenn ich eine Datei mit folgendem Inhalt habe und möchte das z.B für jedes Land nur 2 Einträge gibt, also wenn denmark 3 mal drin sein sollte der erste Eintrag gelöscht wird und nur die letzten zu sehen ist. Gibt es in Perl eine Möglichkeit wie man das ganze am besten händeln kann.

In Perl gilt auch hier "There is more than one way to do it"{´"

Da ich in Perl6-Syntax nicht fit bin nur zwei Ansätze in Perl5 (ungetestet

Code (perl): (dl )
1
2
3
4
5
6
my @lines = ...;  # Ausgagsliste
my %hits;         # wieviele Einträge pro Land
my @result = reverse               # 4. zurück zur Ausgangs-Reihenfolge
             grep {/#(\w*)\.xml/;  # 2. ländername extrahieren
                   $hits{$1}++ <2} # 3. pro name die ersten 2 durchlassen
             reverse @lines;       # 1. Reihenfolge umkehren

Dabei bleibt die Reihenfolge erhalten, es werden nur Einträge weggeschmissen

oder
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
my @lines = ...;  # Ausgagsliste
my %hits;   
foreach my $l (@lines) {
  $l =~ m/#(\w+)\.xml/;
  push @{$hits{$1}},$l;   # Hash land ->[line1,line2...]
};

my @result;
foreach my $k (keys %hits) {
  if (@{$hits{$k}} > 2) {
    push @result,@{$hits{$k}}[-2,-1];    # letzte 2 Einträge
  } else {
    push @result,@{$hits{$k}}            # alle Einträge für land
  }
};

hier wird die Reihenfolge der Länder nicht beibehalten, dafür ist der Ansatz evtl. schneller.
Last edited: 2011-05-24 13:43:44 +0200 (CEST)

View full thread Bestimmte array Elemente löschen