C#如何对Dictionary遍历赋值

 更新时间:2023年09月08日 16:40:29   作者:蛋疼的世界  
这篇文章主要介绍了C#如何对Dictionary遍历赋值问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

C#对Dictionary遍历赋值

Dictionary<int, string> datatable = new Dictionary<int, string>();
datatable.Add(1, "hello1");
datatable.Add(2, "hello2");
int[] keys = datatable.Keys.ToArray();
for (int i = 0; i < keys.Length; i++)
{
    if (datatable[keys[i]] == "hello2")
    {
        datatable[keys[i]] = "hello";
    }
}

C#循环遍历Dictionary,并且可以改变值

通常的C#循环遍历是用foreach循环遍历。好处就是简单,但是缺点就是无法在循环中改变Dictionary的值。

Dictionary <string,int>

一下遍历这个Dictionary。

代码:

            for (int i = 0; i < HostMessage.Count; i++)
            {
                var item = HostMessage.ElementAt(i);
                Console.WriteLine("key is " + item.Key);
                Console.WriteLine("value is " + item.Value);
                if (item.Key == "MS01")
                {
                    HostMessage["MT01"] = 102;
                }
            }

默认HostMessage中有值。

这样就可以了。

我这样写有个BUG,就是在终端输出依旧是没有改变值的,其实是改变了,是不过没有及时输出。要是用以下代码就好了。

            for (int i = 0; i < HostMessage.Count; i++)
            {
                var item = HostMessage.ElementAt(i);
                Console.WriteLine("key is " + item.Key);
                Console.WriteLine("value is " + item.Value);
                if (item.Key == "MS01")
                {
                    HostMessage["MT01"] = 102;
                }
            }
            Console.WriteLine("*****************************8888");
            foreach (string key in HostMessage.Keys)
            {
                Console.WriteLine("Key = {0}, Value = {1}", key, HostMessage[key]);
            }

补充:

更新一个新用法

Dictionary<Dictionary<string, int>, string> zh = new Dictionary<Dictionary<string, int>, string>();

如何输出这个字典?

直接上示例代码

            Dictionary<Dictionary<string, int>, string> zh = new Dictionary<Dictionary<string, int>, string>();
            Dictionary<string, int> HostM = new Dictionary<string, int>();
            Dictionary<string, string> ss = new Dictionary<string, string>();
            HostM.Add("MT01", 101);           
            HostM.Add("MT09",100);
            HostM.Add("MT010", 101);
            HostM.Add("MT02", 100);
            HostM.Add("MT03", 101);
            HostM.Add("MT04", 100);
            HostM.Add("MT05", 101);
            HostM.Add("MT08", 100);
            HostM.Add("Ms01", 101);
            HostM.Add("Ms02", 100);
            HostM.Add("LD01", 101);
            HostM.Add("PS01", 100);
            ss.Add("MT01", "traytab");
            ss.Add("MT09", "solidifyOut");
            ss.Add("MT010", "solidifyIn");
            ss.Add("MT02", "WBIn");
            ss.Add("MT03", "WBOUt");
            ss.Add("MT04", "Finish");
            ss.Add("MT05", "are");
            ss.Add("MT08", "spc");
            ss.Add("Ms01", "LDmachine");
            ss.Add("Ms02", "qwe");
            ss.Add("LD01", "asc");
            ss.Add("PS01", "sdf");
            foreach (string key in HostM.Keys)
            {
                Dictionary<string, int> ac = new Dictionary<string, int>();
                ac.Add(key, HostM[key]);
                zh.Add(ac, ss[key]);
            }
            foreach (Dictionary<string, int> key in zh.Keys)
            {
                foreach (string kkey in key.Keys)
                {
                    Console.WriteLine(kkey + "_" + key[kkey] + "_" + zh[key]);
                }

这样就可以了。

前面的都是给字典添加内容的,就不说了,解释最后三行代码

            foreach (Dictionary<string, int> key in zh.Keys)
            {
                foreach (string kkey in key.Keys)
                {
                    Console.WriteLine(kkey + "_" + key[kkey] + "_" + zh[key]);
                }

第一行,因为zh的key是一个字典,所以foreach的key要设置为Dictionary<string, int> ,第二foreach的kkey因为Dictionary<string, int> 的key是string,所以设置kkey为string。

这样思路就清晰了,kkey是(Dictionary<string, int> 的key(键)key是Dictionary<string, int>字典,所以值为key[kkey].zh[key]为最外围的字典内容。这样只要思路理清了,就输出正确了。

我在这里绕了好久才想明白。 

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • C# 设计模式系列教程-简单工厂模式

    C# 设计模式系列教程-简单工厂模式

    简单工厂模式职责单一,实现简单,且实现了客户端代码与具体实现的解耦。
    2016-06-06
  • C#运算符之与,或,异或及移位运算小结

    C#运算符之与,或,异或及移位运算小结

    本文是对C#中的与,或,异或及移位运算进行了详细的介绍,需要的朋友可以过来参考下,希望对大家有所帮助
    2013-10-10
  • C#实现跨进程条件变量的示例代码

    C#实现跨进程条件变量的示例代码

    C#提供的多进程同步对象有互斥锁和信号量,但是并没有条件变量,虽然信号量条件变量一定程度可以等效,但是具体的使用还是会有区别,本文提供了一种条件变量的实现方法,可以用于进程间的同步控制,需要的朋友可以参考下
    2024-07-07
  • C#自定义特性(Attribute)详解

    C#自定义特性(Attribute)详解

    本文详细讲解了C#的自定义特性(Attribute),文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-04-04
  • C#中类的使用教程详解

    C#中类的使用教程详解

    在对类访问使用时,常用到的有访问类的成员、方法。本文就将通过示例为大家详细讲讲C#中类的使用教程,感兴趣的小伙伴可以跟随小编一起学习学习
    2022-07-07
  • C#中FTP常用操作的示例代码

    C#中FTP常用操作的示例代码

    这篇文章主要为大家详细介绍了C#中FTP常用操作的相关知识,文中的示例代码讲解详细,具有一定的借鉴价值,有需要的小伙伴可以跟随小编一起学习一下
    2024-04-04
  • .Net WInform开发笔记(三)谈谈自制控件(自定义控件)

    .Net WInform开发笔记(三)谈谈自制控件(自定义控件)

    自定义控件的出现有利于用户更好的实现自己的想法,可以封装一些常用的方法,属性等等,本文详细介绍一下自定义控件的实现,感兴趣的朋友可以了解下
    2013-01-01
  • C#计算字符串相似性的方法

    C#计算字符串相似性的方法

    这篇文章主要介绍了C#计算字符串相似性的方法,实例分析了C#计算字符串相似性的原理与算法实现技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-07-07
  • UnityShader使用图像叠加实现运动模糊

    UnityShader使用图像叠加实现运动模糊

    这篇文章主要为大家详细介绍了UnityShader使用图像叠加实现运动模糊,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-02-02
  • 利用C#/VB.NET实现PPT转换为HTML

    利用C#/VB.NET实现PPT转换为HTML

    利用PowerPoint可以很方便的呈现多媒体信息,且信息形式多媒体化,表现力强。但难免在某些情况下我们会需要将PowerPoint转换为HTML格式,本文就为大家整理了转换方法,希望对大家有所帮助
    2023-05-05

最新评论