C#实现Dictionary字典赋值的方法

Dictionary<TKey,TValue> 类,表示键和值的集合。

Dictionary<TKey,TValue> 泛型类提供一组键到一组值的映射。 每次对字典的添加都包含一个值和与其关联的键。 使用其键检索值的速度非常快。

之前使用Dictionary,也没遇到什么问题,感觉很方便,通过键值对的形式进行新建 – 存储 – 校验Key/Value是否存在 – 读取 – 修改/移除维护,一切正常。 近期取犯了一个不应该犯的错 – 赋值。

	class Program
    {
        static List<List<int>> handCards = new List<List<int>>();
        static void Main(string[] args)
        {
  			//声明 赋值
            Dictionary<int, int> dic1 = new Dictionary<int, int>();
            dic1.Add(1, 1);
            dic1.Add(2, 2);

            Dictionary<int, int> dic2 = dic1;
            dic2.Add(3, 3);
            dic2.Add(4, 4);

            foreach (var item in dic1.Keys)
            {
                Console.WriteLine("dic1 : " + dic1[item]);

            }
            foreach (var item in dic2.Keys)
            {
                Console.WriteLine("dic2 : " + dic2[item]);

            }
        }
    }

这种赋值的方式是直接将dic2指向了dic1的内存地址,其实就是一个人,叫两个名字而已,所以这时不管你叫谁他都有反应, 即对dic1和dic2进行的所有操作都是一个内存地址进行修改,也就是说对dic1修改就是对dic2修改。

对于这种概念,我们最初学习引用类型的时候就已经有过接触了,所以说,大家也基本不会犯这样的错误。

需要注意的是,当我们使用Dic作为参数的时候,对它遍历时,尽量不要在外部对它进行添加/删除元素,否则可能会遇到这错:Unity 报错 之 InvalidOperationException: out of sync。

还有一种情况就是,当我们需要多个操作校验的时候,有多个方法同时执行,对这个Dic进行操作,也会产生问题。

那么,问题来了,想像值类型那么赋值该怎么写呢?

	class Program
    {
        static List<List<int>> handCards = new List<List<int>>();
        static void Main(string[] args)
        {
            //声明 赋值
            Dictionary<int, int> dic3 = new Dictionary<int, int>();
            dic3.Add(1, 1);
            dic3.Add(2, 2);

            //相当于值类型赋值
            Dictionary<int, int> dic4 = new Dictionary<int, int>(dic3);
            dic4.Add(3, 3);
            dic4.Add(4, 4);

            foreach (var item in dic3.Keys)
            {
                Console.WriteLine("dic3 : " + dic3[item]);

            }
            foreach (var item in dic4.Keys)
            {
                Console.WriteLine("dic4 : " + dic4[item]);

            }
        }
    }

这样的话就可以只是用Dictionary的值,新开辟了一块内存地址,而不会对它本身有影响。

到此这篇关于C#实现Dictionary字典赋值的方法的文章就介绍到这了,更多相关C# Dictionary字典赋值内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • C#字典Dictionary的用法说明(注重性能版)

    前言 以键值对Dictionary<[key], [value]>形式存值,和哈希表很像也是一种无序的结构. 要使用Dictionary,需要先导入C#泛型命名空间System.Collections.Generic Dictionary需要注意的特性 1.任何键都必须是唯一的 --> 不能添加相同key的键值对,不然就报错: 如果要修改已有key对应的value,可以这样做: 2.Unity5.4以下的版本,最好不要用foreach来遍历字典: 法一:foreach遍历字典,会生成GC

  • C#创建安全的字典(Dictionary)存储结构

    在上面介绍过栈(Stack)的存储结构,接下来介绍另一种存储结构字典(Dictionary). 字典(Dictionary)里面的每一个元素都是一个键值对(由二个元素组成:键和值) 键必须是唯一的,而值不需要唯一的,键和值都可以是任何类型.字典(Dictionary)是常用于查找和排序的列表. 接下来看一下Dictionary的部分方法和类的底层实现代码: 1.Add:将指定的键和值添加到字典中. public void Add(TKey key, TValue value) { Insert(

  • C#实现Dictionary字典赋值的方法

    Dictionary<TKey,TValue> 类,表示键和值的集合. Dictionary<TKey,TValue> 泛型类提供一组键到一组值的映射. 每次对字典的添加都包含一个值和与其关联的键. 使用其键检索值的速度非常快. 之前使用Dictionary,也没遇到什么问题,感觉很方便,通过键值对的形式进行新建 – 存储 – 校验Key/Value是否存在 – 读取 – 修改/移除维护,一切正常. 近期取犯了一个不应该犯的错 – 赋值. class Program { stati

  • Python的“二维”字典 (two-dimension dictionary)定义与实现方法

    本文实例讲述了Python的"二维"字典 (two-dimension dictionary)定义与实现方法.分享给大家供大家参考,具体如下: Python 中的dict可以实现迅速查找.那么有没有像数组有二维数组一样,有二维的字典呢?比如我需要对两个关键词进行查找的时候.2D dict 可以通过 dict_2d = {'a': {'a': 1, 'b': 3}, 'b': {'a': 6}} 来建立,并通过 dict_2d['a']['b'] 来访问.但是添加一个新的 "k

  • 11个Python3字典内置方法大全与示例汇总

    概述 在绝大部分的开发语言中与实际开发过程中,Dictionary扮演着举足轻重的角色.从我们的数据模型到服务器返回的参数到数据库的应用等等,Dictionary的身影无处不在. 在Python中,Dictionary是一种可变的容器类型.所谓容器类型,就是我们放置数据的地方.不同于List的有序.操作时对数据类型统一性的要求较严格,Dictionary是一种可变的.不限存储对象.无序的数据模型. 字典有着类似列表的高灵活度的特点,而与列表通过偏移索引的存取元素的方式不同,字典是通过无序的键来存

  • Python有序字典简单实现方法示例

    本文实例讲述了Python有序字典简单实现方法.分享给大家供大家参考,具体如下: 代码: # -*- coding: UTF-8 -*- import collections print 'Regular dictionary:' d = {} d['a'] = 'A' d['b'] = 'B' d['c'] = 'C' for k, v in d.items(): print k, v print '\nOrderedDict:' d = collections.OrderedDict() d

  • python创建关联数组(字典)的方法

    本文实例讲述了python创建关联数组(字典)的方法.分享给大家供大家参考.具体分析如下: 关联数组在python中叫字典,非常有用,下面是定义字典的两种方法 # Dictionary with quoted or variable keys d1 = {"name":"donuts","type":"chocolate","quantity":10} # Dictionary with fixed key

  • Python字典操作详细介绍及字典内建方法分享

    创建 方法一: >>> dict1 = {} >>> dict2 = {'name': 'earth', 'port': 80} >>> dict1, dict2 ({}, {'port': 80, 'name': 'earth'}) 方法二:从Python 2.2 版本起,可以使用一个工厂方法,传入一个元素是列表的元组作为参数 >>> fdict = dict((['x', 1], ['y', 2])) >>> f

  • Python cookbook(数据结构与算法)实现查找两个字典相同点的方法

    本文实例讲述了Python实现查找两个字典相同点的方法.分享给大家供大家参考,具体如下: 问题:寻找两个字典中间相同的地方(相同的键.相同的值等) 解决方案:通过keys()或者items()方法来执行常见的集合操作(比如求并集.交集和差集) >>> a={'x':1,'y':2,'z':3} >>> b={'ww':10,'x':11,'y':2} >>> a.keys()& b.keys() #键的交集 {'y', 'x'} >>

  • python 解决动态的定义变量名,并给其赋值的方法(大数据处理)

    最近消费kafka数据到磁盘的时候遇到了这样的问题: 需求:每天大概有1千万条数据,每条数据包含19个字段信息,需要将数据写到服务器磁盘,以第二个字段作为大类建立目录,第7个字段作为小类配合时间戳作为文件名,临时文件后缀tmp,当每个文件的写入条数(可配置,比如100条)达到要求条数时,将后缀tmp改为out. 问题:大类共有30个,小类不计其数而且未知,比如大类为A,小类为a,时间戳为20180606095835234,则A目录下的文件名为20180606095835234_a.tmp,这样一

  • python遍历 truple list dictionary的几种方法总结

    实例如下: def TestDic1(): dict2 ={'aa':222,11:222} for val in dict2: print val def TestDic2(): dict2 ={'aa':222,11:222} for (key,val) in dict2.items(): print key,":",val def TestList1(): list=[1,2,3,4,5,3,2,'ada','fs3'] for i in range(len(list)): pr

  • Go语言实现字符串切片赋值的方法小结

    前言 在所有编程语言中都涉及到大量的字符串操作,可见熟悉对字符串的操作是何等重要.本文通过示例详细介绍了Go语言实现字符串切片赋值的方法,感兴趣的朋友们跟着小编一起来看看吧. 1. 在for循环的range中 func StrRangeTest() { str := []string{"str1", "str2", "str3"} for i, v := range str { fmt.Println(i, v) v = "test&q

随机推荐