C# Dictionary遍历删除

一、C#遍历删除的两种方式

观察如下代码:我们希望去除80分一下的同学名称;

Dictionary<string,int> students=new Dictionary<string, int>();
students.Add("xiaoming",90);
students.Add("xiaohong",80);
students.Add("xiaolan",70);
foreach(KeyValuePair<string,int> stu in students){
     if(stu.Value<80){
          students.Remove(stu.Key);
     }
}

运行之后发现了报错:Collection was modified; enumeration operation may not execute

报错的主要原因是:我们不能在foreach中对List以及Dictionary等进行元素的添加和删除操作;

如果是List,我们可以用for循环来避免这个问题,但是如果是Dictionary,我们就需要将其转换为List来解决这个问题;

方法一:

额外创建一个数组存储需要删除的所有Key值;

            Dictionary<string,int> students=new Dictionary<string, int>();
            students.Add("xiaoming",90);
            students.Add("xiaohong",80);
            students.Add("xiaolan",70);
            List<string> otherStus=new List<string>();
            foreach(var stu in students){
                if(stu.Value<80){
                    otherStus.Add(stu.Key);
                }
            }
            for(int i=1;i<otherStus.Count;i++){
                students.Remove(otherStus[i]);
            }

方法二:

使用System.Linq的ToList方法;

            Dictionary<string,int> students=new Dictionary<string, int>();
            students.Add("xiaoming",90);
            students.Add("xiaohong",80);
            students.Add("xiaolan",70);
            List<string> stusName=students.Keys.ToList();
            List<int> stusGrade=students.Values.ToList();
            for(int i=1;i<stusGrade.Count;i++){
                if(stusGrade[i]<80){
                    students.Remove(stusName[i]);
                }
            }
            foreach(var stu in students){
                Console.WriteLine(stu.Key);
            }

 

参考

List使用Foreach 修改集合时,会报错的解决方案 (Error: Collection was modified; enumeration operation may not execute. ) - 摘自网络

C#数组,List,Dictionary的相互转换

[译文]c# /.Net 技巧: ToDictionary() and ToList()

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值