perl語言小技巧之按下標刪除陣列元素

2021-07-09 17:33:39 字數 1709 閱讀 1966

perl 裡面刪除陣列元素有 delete, 但delete刪除後只是相應元素置為undef,實際上也有其他對陣列進行操作的介面,如push,pop,shift,un****,但它們只對陣列的開頭進行操作,

對陣列按下標進行刪除只能是將元素刪除後將元素後的元素依次前移。

最近找到乙個替代函式splice,感覺非常好用,不但能實現陣列按下標刪除,還能實現前面說的push,pop,****,un****的功能。

splice 拼接函式

呼叫語法:

@retval = splice (@array, skipelements, length, @newlist);

拼接函式可以向列表(陣列)中間插入元素、刪除子列表或替換子列表。

引數skipelements是拼接前跳過的元素數目,length是被替換的元素數,newlist是將要拼接進來的列表。

當newlist的長度大於length時,後面的元素自動後移,反之則向前縮排。

因此,當length=0 時,就相當於向列表中插入元素

,而形如語句 splice (@array, -1, 0, "hello"); 則向陣列末尾新增元素。

而當newlist為空時就相當於刪除子列表

,這時,如果length為空,就從第skipelements個元素後全部刪除,而刪除最後乙個元素則為:splice (@array, -1);這種情況下,返回值為被刪去的元素列表。

#!perl

use strict;

my @array;

# 刪除陣列第乙個元素(相當於shift)

@array = ('first', 'second', 'third', 'fourth');

splice (@array, 0, 1);

print "@array\n";

# 刪除陣列第二個元素

@array = ('first', 'second', 'third', 'fourth');

splice (@array, 1, 1);

print "@array\n";

# 刪除陣列最後個元素 (相當於pop)

@array = ('first', 'second', 'third', 'fourth');

splice (@array, $#array, 1);

print "@array\n";

# 刪除陣列最後個元素 (相當於pop)

@array = ('first', 'second', 'third', 'fourth');

splice (@array, -1);

print "@array\n";

# 在陣列開頭新增元素 (相當於unshift)

@array = ('first', 'second', 'third', 'fourth');

splice (@array, 0, 1, "add" );

print "@array\n";

# 在陣列開頭新增元素 (相當於push)

@array = ('first', 'second', 'third', 'fourth');

splice (@array, -1, 1, "add" );

print "@array\n";

結果:

Perl 處理時間的小技巧 strftime

在 perl 中處理時間,很多模組,很方便,但是剛開始玩的人,可能沒有發現合適的模組,所以使用起來感覺很麻煩.通常大家都 localtime 搞得大家都很火大.我有幸和大師學習了一下,給大家推薦一下乙個模組 strftime.我們在推薦前,介紹一下 perl 下取時間的今生前世吧.以前我想大家都是使...

MAC下小技巧

1 mac下xcode鏈結動態庫 將dylib拷貝到原始碼資料夾下,然後在xcode工程中新增檔案,將dylib新增到工程中編譯即可 使用cmake編譯出的程式沒有圖示 ps make完以後手動修改info.plist無效 類似在cmake中修改info.plist欄位中的值還有以下 macosx ...

zmud之小技巧

1.自動enforce和enchant最大值 由enable激發trigger tri 由hp激發trigger tri tri func maxlevel 獲得最大能學習的skill的乙個好處是可以在學習機器中自動判斷最大值,不管是法術還是普通技能都由這個 max sk來限制,從而方便平均技能級別...