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

fulug
 2006-05-28 03:51
#66641 #66641
User since
2005-12-07
9 Artikel
BenutzerIn
[default_avatar]
hallo,
Ich wollte ein Programm schreiben, das (siehe Threadtitel) die undefinierten Stellen eines Arrays löschen sollte.
Mein Buch sagt:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
#!/usr/bin/perl

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

@new = ();

for ($i=0;$i<=$#old;$i++)
{
$new[$n++] = $old[$i] if defined $old[$i]; }

print "\n@old";
print "\n\n@new\n\n";


Das heisst doch, dieses Skript löscht nicht die undefinierten Stellen, sondern schreibt die definierten in ein anderes Array!?
Ich dachte da eher an eine Lösung mit "splice".
Also in etwa so:

Code: (dl )
1
2
3
4
5
6
7
8
 
$i=0;
foreach (@old)
{ if ($old[$i] != defined)
{ splice @old,$old[$i],1; }
$i++;

}

Allerdings hat diese Methode (auch in etlichen Variationen) kein brauchbares Ergebnis hervorgebracht.
Könnte mich jemand aufklären?

mfg fulug

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