perl如何刪除陣列元素

2022-07-19 02:15:13 字數 2592 閱讀 2807

在陣列中刪除元素,除了可以用shift pop等處理一些特殊位置的資料,一般位置用undef $_等是不行的,雖然值不存在了,但index依然占用位置。

比如說: @array = ('ray', 'loca', 'simon', 'ray'); 這裡,我們想刪除『ray』這個元素。

用下面的方法: foreach (@array) } foreach(@array) 可以證明無論是undef還是''都是不行的,位置依然存在。

下面列出幾種可行的方法: 1. 用grep函式。

函式名grep

呼叫語法

@foundlist = grep (pattern, @searchlist);

解說與同名的unix查詢工具類似,grep函式在列表中抽取與指定模式匹配的元素,引數pattern為欲查詢的模式,返回值是匹配元素的列表。

例子@list = ("this", "is", "a", "test"); @foundlist = grep(/^[tt]/, @list);

結果@foundlist = ("this", "test");

2. 用map函式

函式名map

呼叫語法

@resultlist = map (expr, @list);

解說此函式在perl5中定義,可以把列表中的各個元素作為表示式expr的運算元進行運算,其本身不改變,結果作為返回值。在表示式expr中,系統變數$_代表各個元素。

例子1、@list = (100, 200, 300); @results = map ($_+1, @list); 2、@results = map (&mysub($_), @list);

結果1、(101, 201, 301) 2、無

3. 用splice或者delete

函式名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);這種情況下,返回值為被刪去的元素列表

兩者都可以按照index直接刪除array或者hash的元素。但是delete刪除元素後, index後面的元素並不會 主動往前移動,該元素刪除後,在array還留有乙個undef的元素,顯然刪除得不夠乾淨。

下面用個小程式說明具體操作:

#

!/usr/bin/perl

usestrict;

usewarnings;

my@array = ('

ray', '

loca

', '

simon

', '

ray'

);my

$wanted = '

ray'

;print

"***show howto delete elements from array***\n\n";

print

"old array is @array\n";

#method one: using grep

@array = grep @array

;print

"now array is @array\n";

#method two: using map

@array = ('

ray', '

loca

', '

simon

', '

ray');#

function: if the the input string isn't the wanted string

# return the input string.

submy_print

@array = map @array

;print

"now array is @array\n";

#method three: using splice or delete

@array = ('

ray', '

loca

', '

simon

', '

ray');#

the position of first "ray" is 0

splice (@array, 0, 1

);print

"now array is @array\n";

#the position of first "ray" is 2

splice

@array, 2, 1

;print

"now array is @array\n

";

Perl 刪除陣列中重複元素

寫乙個小程式時候,需要去除乙個陣列中的重複元素,搜尋了一下,找到的 主要是兩種,一種是使用grep函式,一種是轉換為hash表,分別如下 使用grep函式 片段 my array a b c a d 1,2,5,1,5 my count my uniq times grep 2 array 使用轉換...

如何刪除陣列中的元素

php中的陣列要新增元素非常簡單,直接用賦值就行了,陣列的key會自動增加,但是要刪除陣列中的元素呢?你想過嗎?是不是很少遇到?我近日在處理乙個購物籃程式時遇到了要刪除陣列中元素的問題,尋找了半天,終於找到了刪除陣列的方法,其實很簡單.開始我參照一篇文章 字串陣列,刪除陣列元素 oso中有 中的方法...

js刪除陣列元素

方法 array.remove dx 功能 刪除陣列元素.引數 第乙個引數是說明第二個引數的型別,index 表示第二個引數是元素下標,element 表示第二個引數是要刪除的元素 返回 在原陣列上修改陣列 刪除陣列元素,第乙個引數是說明第二個引數的型別,index 表示第二個引數是元素下標,ele...