Re: [問題]走訪陣列或容器時做刪除動作

看板C_Sharp作者 (做自己)時間15年前 (2009/03/14 21:46), 編輯推噓1(101)
留言2則, 2人參與, 最新討論串2/2 (看更多)
※ 引述《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
使用陣列倒過來remove就沒index的問題了
03/25 08:04, 2F
文章代碼(AID): #19kxKr02 (C_Sharp)
文章代碼(AID): #19kxKr02 (C_Sharp)