/ Forside / Teknologi / Udvikling / Perl / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Perl
#NavnPoint
bjarneA 141
poul_from 50
soccer 30
Nicknack 14
Tmpj 0
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

Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408914
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste