Re: [問題]走訪陣列或容器時做刪除動作
※ 引述《CYBASTER (復讎の業火)》之銘言:
: 版上諸位先進高手們好:
: 小弟最近幫人用C#開發一條程式,碰到一個問題,其實從前寫C++就已經遇過,
: 那就是在走訪循序式容器的途中作刪除動作,基本上它讓容器變短了,
: 存取的索引值也就跟著亂掉了,
: 比方說10個元素的陣列(for int i=0; i!=arr.Count; i++),索引值從0到9,
: 可是我把索引值6(此時i=6)的元素刪掉時,索引值變成0到8,
: 下次再執行i++時,i從6變成7,可是新的索引值7「或許」代表原來的索引值8,
: 也或許整個亂掉了(我沒有作仔細的實驗),此時怎麼做才是絕對安全的呢?
: (有個笨方法就是弄一個暫存容器把不打算刪的通通拷過去,
: 原容器清空後再塞回來,但這實在太…了)
: 以往C++是用STL的erase演算法,
: 它就是透過回傳一個新的iterator來重新做正確的銜接,
: 但C#裡好像已經沒有類似iterator的東西了,不知該怎麼處理呢?
: 請各位先進賜教,感激不盡!
我個人覺得c#的list比array好用,我在此提供list版本的供您參考
//list為List<int>
for(int i = list.count - 1; i >= 0 ;i--)
{
int i = list[i];
if ( condition )
list.remove(i);
}
//版上有推用foreach的,簡述一下:
//list如有實作IClone的話可以這樣用
foreach(int i in list.Clone())
{
if ( condition)
list.remove(i);
}
小弟資歷尚淺,僅提供微薄心得,如有錯誤,希冀各方前輩提出糾正
謝謝閱讀!
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.137.134.49
※ 編輯: peiga 來自: 220.137.134.49 (03/14 21:53)
→
03/15 19:47, , 1F
03/15 19:47, 1F
推
03/25 08:04, , 2F
03/25 08:04, 2F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):