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遍历字典删除元素的操作方法与相关注意事项,需要的朋友可以参考下 具体 ...
随机推荐
- hilbert
hilbert 难度级别: A: 编程语言:不限:运行时间限制:1000ms: 运行空间限制:131072KB: 代码长度限制:102400B 试题描述 图1为1阶Hilbert曲线,它由3条长度为1 ...
- 在cmd下输入/g无效
如图: 原来一:斜杠得是\ 二:命令和它之间没空格.这个符号和分号的使用是一样的.
- Trie
字典树 class Trie { public: Trie() { root = new Node(); } ~Trie() { destroy(root); } void insert(string ...
- Windows上python开发--2安装django框架
Windows上python开发--2安装django框架 分类: 服务器后台开发2014-05-17 21:22 2310人阅读 评论(2) 收藏 举报 python django 上一篇文章中讲了 ...
- WordPress工作原理之程序文件执行顺序
在了解WordPress挂载机制时,一直有一个疑惑,到底是WordPress的内核源文件先执行还是主题文件里functions.php文件先执行.为了解决这个问题,想了解WordPress的工作原理, ...
- iptables的详细介绍及配置方法*
Firewall(防火墙):组件,工作在网络边缘(主机边缘),对进出网络数据包基于一定的规则检查,并在匹配某规则时由规则定义的处理进行处理的一组功能的组件. 防火墙类型:根据工作的层次的不同来划分,常 ...
- egrep 查找IP
1. egrep '([^0-9]|\<)(([0-1]?[0-9]{0,2}|([2]([0-4][0-9]|[5][0-5])))\.){3}([0-1]?[0-9]{0,2}|([2]([ ...
- Android Gradle 编译错误Java finished with non-zero exit value 2
出现这个错误主要有两类错误 依赖包重复 方法数超过65K 针对第一种错误,可能是由于build.gradle里写了 compile fileTree(dir: 'libs', include: ['* ...
- HBase的完全分布式的搭建与部署,以及多master
一:前提准备 1.设置时间同步 2.清空logs,datas 3.格式化集群 bin/hdfs namenode -format 4.重启集群 sbin/start-dfs.sh sbin/start ...
- openssh-server 安装
sudo apt-get update sudo apt-get install openssh-server 1:ssh-keygen -t rsa -f ~/.ssh/id_rsa 这里会提示输入 ...