|
| delete array index Fra : Morten P |
Dato : 29-11-08 16:49 |
|
Jeg skal slette et index fra et array så det bliver trunkeret.
Jeg har bygget en funktioner til det, men det virker lidt omstændeligt.
Kan det optimeres?
my @arr = ('a','b','c');
print Dumper adelete(0, @arr); # b,c
print Dumper adelete(1, @arr); # a,c
print Dumper adelete(2, @arr); # a,b
sub adelete
{
my ($index, @arr) = @_;
# index out of bounds
return if $index > scalar @arr - 1;
return if $index < 0;
# First index
return splice (@arr, $index+1)
if $index == 0;
# Last index
return splice (@arr, 0, $index)
if $index == scalar @arr - 1;
my @ar_before = splice (@arr, 0, $index);
my @ar_after = splice (@arr, $index);
return (@ar_before, @ar_after);
}
| |
Adam Sjøgren (29-11-2008)
| Kommentar Fra : Adam Sjøgren |
Dato : 29-11-08 17:08 |
|
On Sat, 29 Nov 2008 16:49:19 +0100, Morten wrote:
> Jeg skal slette et index fra et array så det bliver trunkeret.
> Jeg har bygget en funktioner til det, men det virker lidt omstændeligt.
> Kan det optimeres?
Det kan skrives kortere - splice() kan så vidt jeg kan se klare det du
vil direkte?
$ perl mortenp.pl
$VAR1 = 'b';
$VAR2 = 'c';
$VAR1 = 'a';
$VAR2 = 'c';
$VAR1 = 'a';
$VAR2 = 'b';
$ perl asjo.pl
$VAR1 = [
'b',
'c'
];
$VAR1 = [
'a',
'c'
];
$VAR1 = [
'a',
'b'
];
$ cat asjo.pl
#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;
my @arr = ('a','b','c');
print Dumper [ bdelete(0, @arr) ]; # b,c
print Dumper [ bdelete(1, @arr) ]; # a,c
print Dumper [ bdelete(2, @arr) ]; # a,b
sub bdelete {
my ($index, @list)=@_;
splice(@list, $index, 1);
return @list;
}
$
(Jeg har sat [] rundt om i kaldet til Dumper, så uddata bliver grupperet
lidt mere læseligt. Fejlcheck efterlades som en øvelse til læseren).
Måske jeg har misforstået spørgsmålet?
Mvh.
Adam
--
"If I succeed it seems to me Adam Sjøgren
That we should tell it to people like me" asjo@koldfront.dk
| |
Morten P (29-11-2008)
| Kommentar Fra : Morten P |
Dato : 29-11-08 19:31 |
|
> Det kan skrives kortere - splice() kan så vidt jeg kan se klare det du
> vil direkte?
haha, fedt! Så ved man at man arbejder med Perl
Jo, du forstod det korrekt, sparede mig lige for en spildt funktion!
Tak :)
| |
Adam Sjøgren (29-11-2008)
| Kommentar Fra : Adam Sjøgren |
Dato : 29-11-08 20:04 |
|
On Sat, 29 Nov 2008 19:31:27 +0100, Morten wrote:
>> Det kan skrives kortere - splice() kan så vidt jeg kan se klare det du
>> vil direkte?
> haha, fedt! Så ved man at man arbejder med Perl
> Jo, du forstod det korrekt, sparede mig lige for en spildt funktion!
Hvordan er det nu... Fjern alt unødvendigt, men ikke mere end det?
> Tak :)
Velbekomme.
Mvh.
--
"Eternal evil Adam Sjøgren
Yeah it stares behind the desk" asjo@koldfront.dk
| |
|
|