当前位置: 首页 > news >正文

金融跟单公司网站建设/关键词分析工具有哪些

金融跟单公司网站建设,关键词分析工具有哪些,太仓建设网站,如何设计网站的主菜单在定义数据结构时&#xff0c;Dictionary提供了快速查找数据的功能&#xff0c;另外Dictionary< TKey, TValue >属于key-value键值对数据结构&#xff0c;提供了泛型的灵活性&#xff0c;是数据结构的一个利器&#xff0c;但是目前拥有的string,int,bool等基础数据类型并…

在定义数据结构时,Dictionary提供了快速查找数据的功能,另外Dictionary< TKey, TValue >属于key-value键值对数据结构,提供了泛型的灵活性,是数据结构的一个利器,但是目前拥有的string,int,bool等基础数据类型并不能满足我们的需求,那么如何把自定义的数据类作为Dictionary的key呢?

本文对Dict的内部实现会有提出,但不详细讨论,以解决标题问题为主,如果有想详细了解Dictionary内部实现等更多细节,请转到官网:
https://msdn.microsoft.com/en-us/library/xfhwa508(v=vs.110).aspx

首先需要搞清楚以下问题

  • Dictionary是如何通过key找到的value?
  • 需要怎么做才可以让Dictionary认同我们的自定义类作为Key?
  • 具体代码应该怎么写,去实现?

一、Dictionary是如何通过key找到的value?

首先提几个简单的概念,对我们理解Dictionary有很大的帮助。

哈希表

定义:是一种用于描述有联系键值对数据结构的表。
.NET中有Hashtable的类型,它是一个通过关键字直接访问内存存储位置的数据结构。Dict使用了它,也就是说,Dictionary内部的key,value的存放与查找其实都是由固定的内存地址的,但是数据量多了难免会出现多个key或者value拥有同样的内存地址,这样我们再通过寻址操作数据时就会出现冲突的问题,这个我们叫碰撞冲突。

Dict解决碰撞冲突的方案

Dict采用分离链接法,什么意思呢?就是当不同value被分配到同一个地址时,Dict会在那个地址下再建一个链接,用于存放不同value,放张图大家应该就知道是怎么回事了。
这里写图片描述

明白了以上两个概念,我们基本上就可以理解这句话了:
Dict判断查找key时,首先会调用GetHashCode方法,来取得key的Hashtable,判断Hashtable是否一致,如果Hashtable一样还不算找到,还需要继续判断存放的value是不是(相等)Equal,两个条件都满足,才算真正找到了我们需要的key,然后取出Dictionary存放的value值。

二、需要怎么做才可以让Dictionary认同我们的自定义类作为Key?

举一个栗子:

using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace test_Dict { class Program { class MyClass { private int ID { get; set; } private string name { get; set; } public MyClass(int ID, string name) { this.ID = ID; this.name = name; } } static void Main(string[] args) { MyClass class_one = new MyClass(100,"nini_boom"); MyClass class_two = new MyClass(200,"liyang"); MyClass class_three = new MyClass(100, "nini_boom"); Dictionary<MyClass, int> _TestDict = new Dictionary<MyClass, int>(); _TestDict.Add(class_one,1); _TestDict.Add(class_two,2); Console.WriteLine(_TestDict.ContainsKey(class_three)); Console.ReadKey(); } } }

可以看出,即使我们的class_three和class_one在内容上完全相等,但是Dict中仍然找不到。为什么呢?

因为Dict认为的key相等和我们认为的相等不一样
为什么Dict不认为相等呢?我们知道,.Net中所有的数据结构都是继承了object,但是object本身对继承了它的数据一无所知,所以为了防止继承了objece的数据发生碰撞冲突现象,所以object的做法是让每一个继承它的数据的Hashtable都尽量不一样,因为我们的MyClass也是继承了object的,所以Dict在比较Class_one与class_three 的Hashtable时就认为他俩不相等,所以找不到。

为了实现在内容上相等的类,就可以寻找到同样内容的Key,也就是让自定义类作为Dictionary的key,我们需要重新定义一套比较的规定,来满足我们认为的相等

三、具体代码怎么写,去实现?

在Dict的内部实现中,比较两个key是否相等用到了两个方法:GetHashCode()和Equal(),所以接下来需要在自定义类中重写GetHashCode()和Equal()方法,分别得出Hashtable和比较规则,下次Dict再次比较时就会调用重写的GetHashCode和Equal来进行比较。
再拿上面的栗子举下,增加两个方法:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace test_Dict { class Program { class MyClass { private int ID { get; set; } private string name { get; set; } public MyClass(int ID, string name) { this.ID = ID; this.name = name; } public override bool Equals(object obj) { var your_class = (MyClass)obj; return your_class.ID == this.ID && your_class.name == this.name; } public override int GetHashCode() { int id_hashcode = ID.GetHashCode(); int name_hashcode = name.GetHashCode(); return id_hashcode + name_hashcode; } } static void Main(string[] args) { MyClass class_one = new MyClass(100,"nini_boom"); MyClass class_two = new MyClass(200,"liyang"); MyClass class_three = new MyClass(100, "nini_boom"); Dictionary<MyClass, int> _TestDict = new Dictionary<MyClass, int>(); _TestDict.Add(class_one,1); _TestDict.Add(class_two,2); Console.WriteLine(_TestDict.ContainsKey(class_three)); Console.ReadKey(); } } }

这次返回的就是True了。

文章转载自:https://blog.csdn.net/nini_boom/article/details/78728129

转载于:https://www.cnblogs.com/yeshenmeng/p/9747060.html

http://www.lbrq.cn/news/743185.html

相关文章:

  • 怎么做监控直播网站/谷歌搜索广告
  • 新会住房和城乡建设部网站/百度搜索指数的数据来源
  • 做pc端网站一般多少钱/怎么制作自己公司网站
  • 校园网站集群建设/网站域名怎么查询
  • 怎样用编程语言做网站/深圳整合营销
  • 正规网站建设套餐报价/百度推广托管
  • 阿里去要企业网站建设方案书/百度知道合伙人官网
  • 肇庆网站上排名/seo的中文意思
  • 企业做门户网站的重要性/桔子seo查询
  • 校园云网站建设/留号码的广告网站不需要验证码
  • 网站控制/网络营销的市场背景
  • 成人学室内设计学校有哪些/青岛seo网站推广
  • 成都网站建设/站优化
  • 绍兴网站的优化/网络培训机构排名前十
  • 广州市建设厅官方网站/qq推广引流怎么做
  • 企业门户网站系统/网络营销岗位招聘信息
  • 建设部信访网站/百度广告联盟一个月能赚多少
  • 网站排名软件利搜/目录型搜索引擎有哪些
  • 雄安专业网站建设公司/百家号seo怎么做
  • 如何用ae做模板下载网站/网站结构
  • WordPress付费会员组/百度优化插件
  • 美国做海关数据知名网站/google海外推广
  • 网站页面设计公司推荐/地推团队联系方式
  • 网站开发项目延期说明/链接制作软件
  • 自己做整个网站的流程/个人怎么做百度竞价
  • 大淘客网站推广位怎么做/搜索引擎入口大全
  • 在什么网站可以接活做/全国十大教育机构
  • 移动门户网站建设特点/最佳磁力吧ciliba搜索引擎
  • 单位网站建设方案/青岛网站制作公司
  • 美食网站中饮食资讯该怎么做/2021时事政治热点50条
  • “无纸化办公”加速推进,房产证智能识别技术或成行业标配
  • PostgreSQL 流程---更新
  • Linux上安装MySQL 二进制包
  • 挑战极限:在256MB内存的机器上构建MySQL极简安装方案
  • 大数据毕业设计选题推荐-基于大数据的1688商品类目关系分析与可视化系统-Hadoop-Spark-数据可视化-BigData
  • 算法——快速幂