C#循环删除集合中的元素

有些语言在一个很典型的for或foreach循环中就可以删除集合中的元素,但是c#不可以,可以参考下面的方式:


C#循环删除集合中的元素

不能够在for中++,未删除时++,删除后不要++
字典的话拷贝了一个键的List
private void test()
        {
            List<string> keys = new List<string>(_soundDic.Keys);
            foreach (string key in keys)
            {
                List<AudioSource> audioList = _soundDic[key];
                for (int i = 0; i < audioList.Count; )
                {
                    if (audioList[i] == null || audioList[i].isPlaying == false)
                    {
                        audioList.RemoveAt(i);
                    }
                    else
                    {
                        i++;
                    }
                }
                if (audioList.Count == 0)
                {
                    _soundDic.Remove(key);
                }
            }
            keys = null;
           
        }

于是问题解决了。是不是很高兴,但千万别高兴太早了哇嘎嘎,
我要指出上面程序中的几大问题
1.避免使用foreach循环,因为每次迭代都会产生24字节的垃圾内存,我想我们不想产生这些垃圾。
2.避免直接操作这个List,而是new一个新的List,把不要删除的数据存入新的List中,最后把新的List赋值给老List集合
原因,试想下,如果删除集合中的一个元素,那么后续的元素都要改变在内存中的位置,产生一定的开销。

如果能理解到这两点,我们可以算一个懂得“节俭”的程序员,哇嘎嘎,能省就省吧!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值