c#字典Dictionary循环Remove自减时注意不能用foreach

字典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的问题

转载于:https://www.cnblogs.com/sung/archive/2013/01/16/2862775.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值