字典Dictionary循环Remove自减时注意不能用foreach,否则会导致循环的时候自己的数量在变化,导致报错,
未解决此问题,需要用for
测试,初始化字典时候,添加2个list,各8个item
编码实现 ConcurrentDictionary<int, List<int>> dic = new ConcurrentDictionary<int, List<int>>();//字典
int count = 0;//list里面的item数量,全局
int countdic = 0;//dic里面的键值对数量。全局
public Form1()
{
InitializeComponent();
List<int> ss = new List<int>();
ss.Add(1);
ss.Add(2);
ss.Add(3);
ss.Add(4);
ss.Add(5);
ss.Add(6);
ss.Add(7);
ss.Add(8);
dic.TryAdd(1, ss);
List<int> ss1 = new List<int>();
ss1.Add(1);
ss1.Add(2);
ss1.Add(3);
ss1.Add(4);
ss1.Add(5);
ss1.Add(6);
ss1.Add(7);
ss1.Add(8);
dic.TryAdd(2, ss1);
//List<int> ss2 = new List<int>();
//ss2.Add(1);
//ss2.Add(2);
//dic.TryAdd(3, ss2);
}
点击按钮一个个移除或者取出所有的list的item,如果list数量为1时候,直接删除键值对,
每次移除,进行计数,统计次数
编码实现 private void button5_Click(object sender, EventArgs e)
{
for (int index = 0; index < dic.Count; index++)
{
var item = dic.ElementAt(index);
for (int i = 0; i < item.Value.Count; i++)
{
if (item.Value.Count == 1)
{
List<int> listCmd = null;
if (dic.TryRemove(item.Key, out listCmd))
{
}
}
else
{
item.Value.Remove(item.Value[i]);
i--;
}
count++;
}
index--;
countdic++;
}
MessageBox.Show(countdic.ToString() + "次Remove字典,Remove字典List子数次数:" + count.ToString());
}
值得注意的是每次移除的时候需要进行内部的循环指针--,可完美实现foreach的问题
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux glibc自带哈希表的用例及性能测试
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 现代计算机视觉入门之:什么是图片特征编码
· 手把手教你在本地部署DeepSeek R1,搭建web-ui ,建议收藏!
· Spring AI + Ollama 实现 deepseek-r1 的API服务和调用
· 数据库服务器 SQL Server 版本升级公告
· 程序员常用高效实用工具推荐,办公效率提升利器!
· C#/.NET/.NET Core技术前沿周刊 | 第 23 期(2025年1.20-1.26)