[問題] 問一個陣列刪除值的問題

看板Perl作者 (每天保持微笑)時間15年前 (2009/05/16 21:12), 編輯推噓3(304)
留言7則, 3人參與, 最新討論串1/1
這個問題有爬過版...但經由版上的方法卻發現,有error,讓我百思不得其解。 首先從版上得知若要刪除陣列中指定位置的值,可以利用splice的功能。 不過使用這個功能遇到一個問題: 我有一個陣列@a經過第一次條件處理後... 我在處理的過程中紀錄了"被處理過的位置"在@b 接著我這麼作... foreach $num_cd(@b) { splice(@a,$num_cd,1); } 但我卻發現...刪除的竟然不是我紀錄的位置=.=,這是為什麼?感謝<_ _> -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 122.146.203.213

05/17 01:53, , 1F
應該是你刪除之後 所紀錄的位置也相對的都改變了
05/17 01:53, 1F

05/17 01:54, , 2F
等到下一次要做 splice 時 已經不是正確要刪除的位置
05/17 01:54, 2F

05/17 05:02, , 3F
可以從靠近尾端的 element 開始刪起
05/17 05:02, 3F

05/17 05:03, , 4F
splice @a, $_, 1 for sort { $b <=> $a } @b;
05/17 05:03, 4F

05/17 20:21, , 5F
也可以用unshift和push組合...遇到需要刪掉的index就跳過
05/17 20:21, 5F

05/17 20:21, , 6F
push,依照不同情況效能可能會比較好(但也可能比較差)
05/17 20:21, 6F

05/17 20:22, , 7F
對不起...上面說錯...是shift不是unshift
05/17 20:22, 7F
文章代碼(AID): #1A3hkZe1 (Perl)