去语言之地图练习

  

地图理论基础知识

  
      <李>类似其他语言中的哈希表或者字典,以键-值形式存储数据李   <李>键必须是支持==或者!=比较运算的类型,不可以是函数,地图或者片   <李>查地图找比线性搜索快很多,但比使用索引访问数据的类型慢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])
  }
  
  }
  

去语言之地图练习