C#如何遍歷刪除List集合中的資料
阿新 • • 發佈:2018-12-21
在搜尋該問題之前我想你一定已經用過foreach遍歷並Remove的操作,突然發現報出了
集合已修改;可能無法執行列舉操作的異常。
我這裡給大家提供四種方式遍歷刪除資料:
第一種是模仿阿里巴巴Java開發手冊1.4的刪除:
新貼出手冊中的內容:
發現C#裡並沒有hasNext()的方法就自己實現了一下
class MyList<T> : IEnumerator { List<T> list = new List<T>(); public object current = null; public object Current { get { return current; } } int icout = 0; public bool MoveNext() { if (icout >= list.Count) { return false; } else { current = list[icout]; icout++; return true; } } public void Reset() { icout = 0; } public void Add(T t) { list.Add(t); } public void Remove(T t) { if (list.Contains(t)) { if (list.IndexOf(t) <= icout) { icout--; } list.Remove(t); } } }
測試程式碼:
第二種:
//通過移動下標來確保不會漏掉要刪除的資料 private static void DeleteList(List<int> testList) { for (int i = 0; i < testList.Count; i++) { if (testList[i].Equals(0) || testList[i].Equals(1) || testList[i].Equals(2) || testList[i].Equals(3)) { Console.WriteLine("刪除元素:" + testList[i]); testList.Remove(testList[i]); i--; } } }
第三種:
//通過倒序遍歷List以保證下標位置 private static void RemoveList(List<int> testList) { for (int i = testList.Count - 1; i >= 0; i--) { if (testList[i].Equals(0) || testList[i].Equals(1) || testList[i].Equals(2) || testList[i].Equals(3)) { Console.WriteLine("刪除元素:" + testList[i]); testList.Remove(testList[i]); } } }
第四種:
//通過生成新List來達成刪除的需求
private static List<int> WhereList(List<int> testList)
{
List<int> needDelete = new List<int>() { 0, 1, 2, 3 };
return testList.Where(p => !needDelete.Contains(p)).ToList();
}
四種方式中無特殊要求第四種最簡單,其次第二第三,第一種方式可方便自己新增功能但也是最麻煩的。
記錄生活點點滴滴。