2010年12月14日 星期二

perl delete array

在 array function 上. 除了用 push, pop 來改變 array 的 pointer外. 也可以用 delete 來清除 array 內部的 data, 但這樣會遇到一個問題. 就是 delete 完後 array 不會 shit 到最新的位置, 所以在做查找時候會出現 undef. 範例. 假設我們 delete 了 dd[0] 的 data. 而下次我們要取得 dd[0] 時,應該為 'c' 才對. 但是現在卻是 undef...xd
use Data::Dumper;
use strict;

my $dd = ['d',
          'c',
          'x',
          'e'];

delete $dd->[0];

print Dumper($dd);                   
result
$VAR1 = [
          undef,
          'c',
          'x',
          'e'
        ];
solution 建立個新的 array 之後再 map 過去...XD.感覺是個很笨的方式.. 不然也可以用 "splice" / "join + split" ...
use Data::Dumper;
use strict;

my $dd = ['d',
          'c',
          'x',
          'e'];

delete $dd->[0];

my $a=[];

foreach my $k (@{$dd}){
  if($k){
   push(@{$a},$k);
 }
}

@{$dd} = @{$a};

print Dumper($dd);
ex: join + split
use Data::Dumper;
use strict;

my $dd = ['d',
          'c',
          'x',
          'e'];

delete $dd->[0];

my $st = join(' ',@{$dd});
@{$dd} = split(' ',$st);

print Dumper($dd);

沒有留言:

張貼留言