C#遍历的时候不要删除元素

该代码示例展示了如何在C#中使用字典,包括遍历打印字典内容,使用foreach循环遍历数组和列表,以及测试字典的删除操作。在删除字典元素时,需要注意在遍历过程中直接修改字典可能引发的问题,提供了解决方案。

namespace _3_2_字典练习
{
    class Program
    {
        // 打印字典
        public static void PrintDict(Dictionary<string,int> dict)
        {
            // for (int i = 0; i<10; i++)    // 字典没有下标,不能用for循环
            //foreach(KeyValuePair<string,int> pair in dict) 
            //{
            //    Console.WriteLine(pair.Key + " " + pair.Value);
            //}

            // 变量可以用var代替,省略写法
            foreach (var pair in dict)
            {
                Console.WriteLine(pair.Key + " " + pair.Value);
            }
        }
       
            

        // TestForeach
        static void TestForeach()
        {
            // 数组中有元素3,4,5,6
            int[] array = new int[] { 3, 4, 5, 6 };

            // 遍历并打印数组的内容
            //for(int i = 0;i < array.Length;i++)
            //{ Console.WriteLine(array[i]); }

            foreach(int n in array)          // 注意n不是下标,而是元素的值
            {
                Console.WriteLine(n);        // 打印:3 4 5 6  
            }

            // string类型的列表
            List<string> list = new List<string> { "a", "bbb", "ccc" };
            foreach(string s in list)
            {
                Console.WriteLine(s);
            }

            // 遍历列表中的元素并打印列表
            foreach(var n in list)
            { Console.WriteLine(n); }
           
        }

        // 测试删除
        static void TestRemove(Dictionary<string,int> dict)
        {
            Console.WriteLine("测试删除");
            // 在遍历字典时,删除key或者修改字典,都可能导致异常(新版本的C#没有此问题)
            foreach(var pair in dict)
            {
                if(pair.Value<=80)
                { dict.Remove(pair.Key); }
            }

            PrintDict(dict);
            Console.WriteLine("删除完毕");

            // 上面对应的传统做法,用列表去接,创建一个列表
            List<string> list = new List<string>();

            // 遍历字典中的每一个元素,如果字段中的值<= 80,就把这条字典对应的key添加到list当中
            foreach(var pair in dict)
            {
                if(pair.Value<=80)
                { list.Add(pair.Key); }
            }
            // 添加的元素,在字典中要删除
            foreach(string name in list)
            {
                dict.Remove(name);
            }


        }
        static void Main(string[] args)
        {
            // var 可以用于所有的变量类型。只要编译器可以推断出实际类型
            var n = 434;
            var f = 3.0f;  // 单精度浮点数
            var ns = 3434;
            var dd = 33;
            var v = false;
            var list = new List<int>();
            List<int> list2 = new List<int>();
           
            

            // 字典dict
            Dictionary<string, int> dict = new Dictionary<string, int>();

            // 字典中添加元素
            dict.Add("小红", 98);
            dict.Add("小猪", 89);
            dict.Add("小春", 75);
            dict.Add("小庄", 90);
            dict.Add("小城", 85);

            // 通过pair的key打印Value的值
            Console.WriteLine(dict["小红"]);

            // 如果字典中小花,打印,如果没有打印字符串
            if(dict.ContainsKey("小红"))
            { Console.WriteLine(dict["小红"]); }
            else
            { Console.WriteLine("字典中没有找到小红"); }

            // 通过key修改值(修改小红的分数)
            dict["小红"] = 99;

            // ★ Set 小花不存在,添加小花=88
            dict["小花"] = 56;

            // 删除Key,key和Value一起删除
            dict.Remove("小猪");

            // 遍历字典,打印内容
            PrintDict(dict);

            // 测试删除
            TestRemove(dict);

            Console.ReadKey();
            // Console.ReadKey();
           
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值