C#遍历List并删除某个或者几个元素的方法

C#遍历List并删除某个或者几个元素的方法,你的第一反应使用什么方法实现呢?foreach? for?

如果是foreach,那么恭喜你,你答错了。如果你想到的是用for,那么你只是离成功进了一步。

正确的做法是用for倒序遍历,根据条件删除。下面我们用代码来演示foreach,for删除list数据的情况:

class Program
    {
        public class Students
        {
            public string Name { get; set; }
            public int Age { get; set; }

            public Students(string name, int age)
            {
                this.Name = name;
                this.Age = age;
            }
        }

        static void Main(string[] args)
        {
            List<Students> stuList = new List<Students>();
            stuList.Add(new Students("Tom",20));
            stuList.Add(new Students("Tang", 20));
            stuList.Add(new Students("Tang", 22));
            stuList.Add(new Students("Trista", 24));
            stuList.Add(new Students("Lili", 25));

            //打印姓名
            Console.Write("删除前:");
            foreach (var stu in stuList)
                Console.Write(stu.Name + " ");

            Console.ReadKey();
        }
    }

打印结果:Tom  Tang  Tang  Trista  Lili

1.先用foreach遍历删除姓名为Tang的学生,代码如下:

foreach (var stu in stuList)
{
       if (stu.Name == "Tang")
            stuList.Remove(stu);
}

会报如下错误:

因为在foreach中删除元素时,每一次删除都会导致集合的大小和元素索引值发生变化,从需导致在foreach中删除元素会出现异常。

2.用for正序遍历删除,代码如下:

//打印姓名
            Console.Write("删除前:");
            foreach (var stu in stuList)
                Console.Write(stu.Name + " ");

            //删除姓名为Tang的学生
            for (int i=0;i< stuList.Count;i++)
            {
                if (stuList[i].Name == "Tang")
                    stuList.Remove(stuList[i]);
            }

            //打印姓名
            Console.Write("\n删除后:");
            foreach (var stu in stuList)
                Console.Write(stu.Name + " ");

结果:

只删除了一个姓名为Tang的学生。为什么会出现这种情况呢?

这是因为当i=1时,满足条件执行删除操作,会移除第一个Tang,接着第二个Tang会前移到第一个Tang的位置,即游标1对应的是第二个Tang。

接着遍历i=2,也就跳过第二个Tang。

3.用for倒序遍历删除,代码如下:

for (int i = stuList.Count-1; i>=0; i--)
            {
                if (stuList[i].Name == "Tang")
                    stuList.Remove(stuList[i]);
            }

结果:

这时删除了全部姓名为Tang的学生。

原文地址:https://www.cnblogs.com/fire909090/p/8289129.html

时间: 2024-11-10 18:39:55

C#遍历List并删除某个或者几个元素的方法的相关文章

Java动态 遍历List 时删除List特征元素 异常问题 及解决方式总结

首先,这是一个极其简单的问题,大牛可忽略,新手可能会遇到,Java中遍历某个List 时删除该List元素 会抛出异常. 这一个简单的问题再高手严重不值一提,但新手可能会比较困惑,用哪种方式可以安全有效的实现遍历list删除某些特征元素? 方式: 方法1.普通for循环 遍历List,删List除自身 特征条目: 方法2.高级for循环 遍历List,删除List自身 特定条目: 方法3.引入参考List,for循环遍历删除原List 特定条目: 方法4.利用iterator 遍历删除List特

java中循环遍历删除List和Set集合中元素的方法

今天一个网友问我集合忘记了没有,这一问让我纠结了一下,最后决定把这个集合问题写下来,以免自己在犯下类似的问题: 需要删除List和Set中的某些元素,当时使用边遍历,边删除的方法,却报了以下异常:ConcurrentModificationException为了以后不会忘记,和也给遇到同样问题的同事提供一个参考: 出现错误的代码如下所示: package set; import java.util.HashSet; import java.util.Iterator; import java.u

ArrayList遍历的同时删除

http://javag.iteye.com/blog/403097 ArrayList遍历的同时删除 博客分类: 随笔 Javathread 方法一 Java代码   ArrayList<String> list = new ArrayList<String>(); list.add("one"); list.add("two"); list.add("two"); list.add("two");

C#遍历List并删除某个元素的方法

C#遍历List并删除某个元素的方法,你的第一反应使用什么方法实现呢?foreach? for? 如果是foreach,那么恭喜你,你答错了.如果你想到的是用for,那么你只是离成功进了一步. 正确的做法是用for倒序遍历,根据条件删除.下面我们用代码来演示foreach,for删除list数据的情况: class Program { public class Students { public string Name { get; set; } public int Age { get; se

c++如何遍历删除map/vector里面的元素

新技能Get! 问题 对于c++里面的容器, 我们可以使用iterator进行方便的遍历. 但是当我们通过iterator对vector/map等进行修改时, 我们就要小心了, 因为操作往往会导致iterator失效, 之后的行为都变得不可预知. 比如: #include <iostream> #include <vector> using namespace std; int main() { vector<int> a = {12, 23, 34, 45, 56,

Python遍历列表时删除元素

无论是使用for还是while,当在从前往后遍历的同时删除列表中的元素时,都会发生些问题. 要从lst = [1,4,0,1,5,0,3,5]中删除所有0元素,有两个比较好的方法: 1 使用filter: lst = filter(lambda x : x != 0, lst) 2 使用列表解析: lst = [x for x in lst if x != 0] 这两种方式既简洁,可读性又好 ref: https://segmentfault.com/a/1190000007214571 原文地

Python的list循环遍历中,删除数据的正确方法

在遍历list,删除符合条件的数据时,总是报异常,代码如下: 1 num_list = [1, 2, 3, 4, 5] 2 print(num_list) 3 4 for i in range(len(num_list)): 5 if num_list[i] == 2: 6 num_list.pop(i) 7 else: 8 print(num_list[i]) 9 10 print(num_list) 会报异常:IndexError: list index out of range 原因是在删

Java遍历List并删除某些元素

Java遍历List并删除某些元素 ? 在阿里的Java编程规约中有一条:[强制]不要在foreach循环里进行元素的remove/add操作.remove元素请使用Iterator方式,如果并发操作,需要对Iterator对象加锁. ? 这里不禁要问为什么? ? 首先来试一下,遍历List时删除元素究竟行不行: public class IteratorTest { public static void singleThreadRemove1(){ List<String> list = n

典型问题分析3—LinkList中遍历操作与删除操作混合使用

LinkList中遍历操作与删除操作混合使用 删除成功后,list.current()返回什么值? #include <iostream> #include "LinkList.h" using namespace std; using namespace DTLib; int main() { LinkList<int> list; for(int i=0; i<5; i++) { list.insert(i); } for(list.move(0);