2015-07-12 408 views
2

在陣列的每個現有元素之間插入元素的最佳方式是什麼?我至今最好的是如下:將中間元素插入到數組中

my @array = (1 , 'foo', { }, [ ]); 
my @new_array; 
push @new_array, $_, ', ' for @array; 
pop @new_array; 

在現實中,@array包含傳遞給HTML ::用逗號分隔的一部分,目的元素的splice_content方法HTML :: Element對象和字符串的混合物元素內容。

+1

這不是一個壞辦法。我想['List :: MoreUtils :: zip'](https://metacpan.org/pod/List::MoreUtils#zip-ARRAY1-ARRAY2-ARRAY3)會有幫助,但你仍然需要創建數組'(',')x $#array'是替代項目,所以它看起來不像是一個很大的節約。 –

+0

感謝您的壓縮建議,通過'List :: *'模塊檢查解決方案並沒有超越我的想法。 – Chris

回答

3

如何:

my @array = (1 , 'foo', { }, [ ]); 
(undef, my @new_array) = map {; ', ' => $_ } @array; 

這需要的鮮爲人知的事實,你可以用undef在列表賦值的左側,表明你不關心這個元素的優勢。 (在map {;分號是讓解析器瞭解,這是一個塊,而不是一個hashref。)

+1

非常好的選擇。在分號修復之前,我對由此產生的語法錯誤感到困惑。 – Chris

3

我想我會用一個map代替for循環,但保持你的pop

my @new_array = map { $_, ', ' } @array; 
pop @new_array; 
+0

在我的腦海裏,我想擺脫那種寂寞的流行音樂,但是這個解決方案肯定能夠保持清晰的意圖。 – Chris