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",));
- stuList.Add(new Students("Tang", ));
- stuList.Add(new Students("Tang", ));
- stuList.Add(new Students("Trista", ));
- stuList.Add(new Students("Lili", ));
- //打印姓名
- 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=;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-; i>=; i--)
- {
- if (stuList[i].Name == "Tang")
- stuList.Remove(stuList[i]);
- }
结果:
这时删除了全部姓名为Tang的学生。
C#遍历List并删除某个或者几个元素的方法的更多相关文章
- js封装删除数组指定的某个元素的方法
首先可以给JS的数组对象定义一个函数,用于查找指定的元素在数组中的位置,即索引,代码为: Array.prototype.indexOf = function(val) { for (var i = ...
- Java动态 遍历List 时删除List特征元素 异常问题 及解决方案总结
首先.这是一个极其简单的问题,大牛可忽略.新手可能会遇到,Java中遍历某个List 时删除该List元素 会抛出异常. 这一个简单的问题再高手严重不值一提,但新手可能会比較困惑,用哪种方式能够安全有 ...
- C++容器在遍历时的删除问题
容器是非常便捷常用的,经常用容器来存储多条数据,然后对数据进行增删查改. 有时要在遍历的同时删除一条数据,但是这样删除的时候程序会导致程序崩溃. 这个问题在GCC 中不会出现,而在VS2008,VS2 ...
- ArrayList遍历的同时删除--- 删除还是用迭代器的比较好,其它的都会有问题.
http://javag.iteye.com/blog/403097 ArrayList遍历的同时删除-- 删除还是用迭代器的比较好,其它的都会有问题. 博客分类: 随笔 Javathread ...
- Python的list循环遍历中,删除数据的正确方法
在遍历list,删除符合条件的数据时,总是报异常,代码如下: num_list = [1, 2, 3, 4, 5] print(num_list) for i in range(len(num_lis ...
- python 遍历list并删除部分元素
python 遍历list并删除部分元素https://blog.csdn.net/afgasdg/article/details/82844403有两个list,list_1 为0-9,list_2 ...
- 如何边遍历集合边删除元素--使用Iterator中的remove()方法
在遍历集合时,想将符合条件的某些元素删除,开始是用了下面的方法 public static void main(String[] args) throws UnsupportedEncodingExc ...
- 遍历List集合删除元素的出现报错
遍历List集合删除元素的出现报错 遍历List集合删除元素的时候会发生索引越界异常或内容遍历不全等问题. 例子: List<String> al = new ArrayList< ...
- Python简单遍历字典及删除元素的方法
Python简单遍历字典及删除元素的方法 这篇文章主要介绍了Python简单遍历字典及删除元素的方法,结合实例形式分析了Python遍历字典删除元素的操作方法与相关注意事项,需要的朋友可以参考下 具体 ...
随机推荐
- CentOS6.4 利用sendEmail发邮件
1.下载安装sendEmail wget http://caspian.dotconf.net/menu/Software/SendEmail/sendEmail-v1.56.tar.gz tar z ...
- python 获取类的属性
如果不清楚一个对象是否拥有某个属性,可以使用内置函数hasattr 访问一个对象的属性的方法是通过特别属性__dict__,它是一个映射,将属性名称映射到属性值 为了调试方便,可以添加下面这个函数 d ...
- [shell] if else以及大于、小于、等于逻辑表达式 [转]
本文也即<Learning the bash Shell>3rd Edition的第五章Flow Control之读书笔记,但我们将不限于此.flow control是任何编程语言中很常用 ...
- Hibernate工作原理及为什么要用?
Hibernate工作原理及为什么要用? 原理:1.通过Configuration().configure();读取并解析hibernate.cfg.xml配置文件2.由hibernate.cfg.x ...
- 封装同步的UIActionSheet
封装同步的UIActionSheet 发问题 做 iOS 开发的同学想必都用过 UIActionSheet.UIActionSheet 可以弹出一个选择列表,让用户选择列表中的某一项操作.使用 UIA ...
- 序号自增key的使用
由于在模板中,需要输出序号,但是从数据库中提取的话,保证不了序号的连续性. 在模板中我就使用foreach循环,查手册看到foreach的使用 但是我还是没从手册中学会key的使用.尝试使用 结果,如 ...
- 多个mysql增加多个服务
//mysql安装目录 mysqld --install mysqld --remove mysql5.5 mysqld --remove mysql5.5 C:\Program Files\MySQ ...
- 微博开发平台java SDK demo学习之examples(demo)
本文介绍demo中函数的功能分块 账号 评论 收藏 关系/好友分组 地理信息 OAuth2(开发指南) 位置服务(开发指南)
- dragloader.js帮助你在页面原生滚动下实现Pull Request操作
dragloader.js是一个面向移动Web开发的JavaScript库,帮助开发者在使用页面原生滚动时,模拟上/下拉手势,实现Pull Request操作. 在移动设备上,一般会使用 drag d ...
- Nginx 笔记与总结(15)nginx 实现反向代理 ( nginx + apache 动静分离)
在 nginx 中,proxy 用来实现反向代理,upstream 用来实现负载均衡. 例如有两台服务器,nginx 服务器作为代理服务器,执行 .html 文件,apache 服务器上执行 .php ...