Thread Array "zusammenziehen" (undef Stellen löschen) (11 answers)
Opened by fulug at 2006-05-28 03:51

Ronnie
 2006-05-28 10:28
#66643 #66643
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
In Perl hast du hierfür viele Möglichkeiten. Wenn du splice nutzen willst, musst du von hinten über das Array wandern, da beim splicen ja dein Array kürzer wird und so deine Indices nicht mehr stimmen. Die Variante mit grep ist wahrscheinlich die, die erfahrenere Perlprogrammierer wohl intuitiv wählen würden.
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
#!/usr/bin/perl

use strict;
use warnings;

use Data::Dumper;

my @old = ( 2, 5, 13, undef, 6, 8, undef, 3);

# mit splice (rückwärts durch das Array)

for (reverse 0..$#old) {
warn "splicing: \@old[$_]" and splice @old, $_, 1 unless defined $old[$_];
}

print Dumper \@old;

# ohne Zählvariable

@old = ( 2, 5, 13, undef, 6, 8, undef, 3);
my @new = ();

for (@old) { push @new, $_ if defined $_ };
@old = @new;

print Dumper \@old;

# die perl-typische Variante

@old = ( 2, 5, 13, undef, 6, 8, undef, 3);
@old = grep { defined } @old;
print Dumper \@old;

View full thread Array "zusammenziehen" (undef Stellen löschen)