地图理论基础知识
-
<李>类似其他语言中的哈希表或者字典,以键-值形式存储数据李>
<李>键必须是支持==或者!=比较运算的类型,不可以是函数,地图或者片李>
<李>查地图找比线性搜索快很多,但比使用索引访问数据的类型慢100倍李>
<李>
地图使用使()创建,支持:=这种简写方式
李> <李> (keyType valueType,帽),盖表示容量,可省略李> <李>超出容量时会自动扩容,但尽量提供一个合理的初始值李> <李>使用len()获取元素个数
李> <李>键值对不存在时自动添加,使用删除()删除某键值对李> <李>使用的范围对地图和切进行迭代操作李>迭代时,注意事项
<人力资源/>
地图的定义形式大概有两种
<代码> 1,地图[K] V 2,地图(K1)地图(K2) V复合地图,也就是说,值值也是地图类型代码><人力资源/>
什么类型,可以做为映射的键吗?
-
<李>地图使用哈希表,必须可以比较相等李>
<李>除了sllice、地图、功能的内建类型都可以作为关键李>
<李> Struct类型不包含上述字段,也可以作为关键
<人力资源/> 李>
<代码>//地图练习 主要包 导入( “fmt” “排序” ) 函数main () {//============================方式一:===========================//创建一个空的地图//先声明一个地图类型 var nodeMap地图(int)字符串//初始化nodeMap,全部为空 nodeMap=地图(int)字符串{} fmt.Println (nodeMap) fmt.Println ("-----------------------------------------------")//============================方式二:===========利用让================var clusterMap地图(int)字符串=使(地图(int)字符串) fmt.Println (clusterMap) fmt.Println ("-----------------------------------------------")//============================方式三:===========利用推断功能================operatorMap:=(地图(int)字符串) fmt.Println (operatorMap)//============================方式四:===========创建时直接初始化================//此种方式,不需要使用 operatorMap2:=地图(int)字符串{3:“你好”,5:“世界”} fmt.Println(“===祝辞:\ t”, operatorMap2)//======初始化=====nodeMap [1]=" sparkNode " nodeMap [2]=" esNode " fmt.Println (nodeMap)//=======根据键取出元素 节点名:=nodeMap [2] fmt.Println(节点名)//======删除键值对 删除(nodeMap 1)//根据键值对,进行删除 fmt.Println (nodeMap) fmt.Println ("-----------------------------------------------")//- - - - - - - - - - - - - - - -复杂地图的操作- - - - - - - - - - - - - - - - - - -//声明一个地图类型 var clusterAppTaskId map [string] map [string]字符串//初始化此地图类型 clusterAppTaskId=使(map [string] map [string]字符串) taskId ok:=clusterAppTaskId (“spark-beijing”) (“/spark-beijing/app-uewqr”) 如果!好{//每一级别的地图都有进行初始化,编译时是找不到的,只有运行时,才能发现 clusterAppTaskId [“spark-beijing”]=使(map [string]字符串) } clusterAppTaskId [“spark-beijing”] [“/spark-beijing/app-uewqr”=坝τ贸绦?英文文宣写作研习营火花taskid - 001” taskId吧=clusterAppTaskId (“spark-beijing”) (“/spark-beijing/app-uewqr”) fmt。Println (taskId,好) fmt.Println ("-----------------------------------------------")//- - - - - - - - - - - - - - - -迭代操作- - - - - - - - - - - - - - - - - - -//因为我,v:={范围片////}//我,表示下标,v表示对应的值,是拷贝的值//要特别注意,对v的任何修改,都不影响原值,//地图类型也是,不会影响原值的//例如,下面的例子,就是对v的操作后,不会对sm产生影响的//因此,不建议使用这种方式 sm:=([]地图(int)字符串,5) _,v:=范围sm { v=(地图(int)字符串) v[1]="好的" fmt.Println (v) } fmt.Println (sm) fmt.Println ("-----------------------------------------------")//下面的修改,原值 我:=范围sm { sm[我]=使(地图(int)字符串) sm[我][2]=盎鸹ā? [我]fmt.Println (sm) } fmt.Println (sm) fmt.Println ("-----------------------------------------------")//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -//地图是无序的,如何按照键从小到大获取中映射的值//需要生成一个切片,来存储映射的键//将键按照从小到大排的序,然后,再根据键去取值 marathonApp:=地图(int)字符串{1:“火花”,3:“西文”,8:“ftp”, 7:“hadoop”, 4:“美丽”,2:“码头工人”} len:=len (marathonApp)//生成一个切片,来存储键 kSlice:=(int [], len)//声明一个计数器,用于初始化切片时使用 var我int=0 对于k, _:=范围marathonApp { kSlice[我]=k 我+ + } fmt。Println(“键排序前:\ t”, kSlice)//切片是引用传递,因此,下面排序后,不需要返回值进行接收 sort.Ints (kSlice) fmt。Println(“键排序后:\ t”, kSlice) fmt.Println(“根据键按照从小到大,依次取出对应的值”)//下面,开始迭代marathonApp,就可以按照键的从小到大,依次取出值了 _,v:=范围kSlice {//这里一定要注意,是用值,而不是kSlice的下标 fmt.Println (marathonApp [v]) } }去语言之地图练习