博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
GoLang基础数据类型--->字典(map)详解
阅读量:6217 次
发布时间:2019-06-21

本文共 15398 字,大约阅读时间需要 51 分钟。

                   GoLang基础数据类型--->字典(map)详解

                                            作者:尹正杰

版权声明:原创作品,谢绝转载!否则将追究法律责任。

 

   可能大家刚刚接触Golang的小伙伴都会跟我一样,这个map是干嘛的,是函数吗?学过python的小伙伴可能会想到map这个函数。其实它就是Golang中的字典。下面跟我一起看看它的特性吧。map 也就是 Python 中字典的概念,它的格式为“map[keyType]valueType”。 map 的读取和设置也类似 slice 一样,通过 key 来操作,只是 slice 的index 只能是`int`类型,而 map 多了很多类型,可以是 int ,可以是 string及所有完全定义了 == 与 != 操作的类型。

 

一.map的赋值方式

1.先的声明再初始化最后赋值

1 /* 2 #!/usr/bin/env gorun 3 @author :yinzhengjie 4 Blog:http://www.cnblogs.com/yinzhengjie/tag/GO%E8%AF%AD%E8%A8%80%E7%9A%84%E8%BF%9B%E9%98%B6%E4%B9%8B%E8%B7%AF/ 5 EMAIL:y1053419035@qq.com 6 */ 7  8 package main 9 10 import (11     "fmt"12     "reflect"13 )14 15 func main() {16     var yinzhengjie map[string]string //先声明一个字典(map)名字叫做yinzhengjie。其key所对应的数据类型是“string”[字符串],value所对应的数据类型也是“string”。17     fmt.Printf("判断yinzhengjie字典是否为空:【%v】\n",yinzhengjie == nil)  //声明的字典,默认为空,需要用make进行初始化操作(map是引用类型,未初始化的是指向nil,初始化了以后应该就有自己的内存空间了,所以不是nil。)所以返回值为空。18     fmt.Printf("第一次查看yinzhengjie字典的值:【%v】\n",yinzhengjie)19     yinzhengjie = make(map[string]string) //再使用make函数进行初始化创建一个非nil的map,nil map不能赋值,如果直接赋值会报错:“panic: assignment to entry in nil map”20     fmt.Printf("再次判断yinzhengjie字典是否为空:【%v】\n",yinzhengjie == nil) //你就把它理解为一个指针,没初始化就是nil,make之后分配内存了,一旦分配了内存地址就不为空了21     fmt.Printf("第二次查看yinzhengjie字典的值:【%v】\n",yinzhengjie)22     yinzhengjie["name"] = "尹正杰"23     fmt.Printf("yinzhengjie字典的类型为:【%v】\n",reflect.TypeOf(yinzhengjie))24     fmt.Printf("第三次查看yinzhengjie字典的值:【%v】\n",yinzhengjie)25 }26 27 28 29 #以上代码执行结果如下:30 判断yinzhengjie字典是否为空:【true】31 第一次查看yinzhengjie字典的值:【map[]】32 再次判断yinzhengjie字典是否为空:【false】33 第二次查看yinzhengjie字典的值:【map[]】34 yinzhengjie字典的类型为:【map[string]string】35 第三次查看yinzhengjie字典的值:【map[name:尹正杰]】

 

2.直接make进行初始化之后再赋值

1 /* 2 #!/usr/bin/env gorun 3 @author :yinzhengjie 4 Blog:http://www.cnblogs.com/yinzhengjie/tag/GO%E8%AF%AD%E8%A8%80%E7%9A%84%E8%BF%9B%E9%98%B6%E4%B9%8B%E8%B7%AF/ 5 EMAIL:y1053419035@qq.com 6 */ 7  8 package main 9 10 import "fmt"11 12 func main() {13     yinzhengjie := make(map[string]int) //表示创建一个key为string,value的值为int的数据类型。14     yinzhengjie["yzj"] = 2515     fmt.Println(yinzhengjie)16 }17 18 19 20 #以上代码执行结果如下:21 map[yzj:25]

3.直接初始化赋值

1 /* 2 #!/usr/bin/env gorun 3 @author :yinzhengjie 4 Blog:http://www.cnblogs.com/yinzhengjie/tag/GO%E8%AF%AD%E8%A8%80%E7%9A%84%E8%BF%9B%E9%98%B6%E4%B9%8B%E8%B7%AF/ 5 EMAIL:y1053419035@qq.com 6 */ 7  8 package main 9 10 import "fmt"11 12 func main() {13     yinzhengjie := map[string]int{14         "尹正杰":18,15         "饼干":20,16     }17     fmt.Println(yinzhengjie)18 }19 20 21 22 #以上代码执行结果如下:23 map[尹正杰:18 饼干:20]

 

二.map的增删改查

1.字典的赋值操作

1 /* 2 #!/usr/bin/env gorun 3 @author :yinzhengjie 4 Blog:http://www.cnblogs.com/yinzhengjie/tag/GO%E8%AF%AD%E8%A8%80%E7%9A%84%E8%BF%9B%E9%98%B6%E4%B9%8B%E8%B7%AF/ 5 EMAIL:y1053419035@qq.com 6 */ 7  8 package main 9 10 import "fmt"11 12 func main() {13     yinzhengjie := make(map[int]string)14     letter := []string{
"a","b","c","d","e","f","g","h"}15 for k,v := range letter{16 yinzhengjie[k] = v17 }18 fmt.Println(yinzhengjie) //注意,字典是无序的哟!19 }20 21 22 23 24 #以上代码执行结果如下:25 map[7:h 0:a 1:b 2:c 3:d 4:e 5:f 6:g]

2.字典的删除操作

1 /* 2 #!/usr/bin/env gorun 3 @author :yinzhengjie 4 Blog:http://www.cnblogs.com/yinzhengjie/tag/GO%E8%AF%AD%E8%A8%80%E7%9A%84%E8%BF%9B%E9%98%B6%E4%B9%8B%E8%B7%AF/ 5 EMAIL:y1053419035@qq.com 6 */ 7  8 package main 9 10 import "fmt"11 12 func main() {13     yinzhengjie := make(map[int]string)14     letter := []string{
"a","b","c","d","e","f","g","h"}15 for k,v := range letter{16 //fmt.Println(k,v)17 yinzhengjie[k] = v18 }19 fmt.Println(yinzhengjie) //注意,字典是无序的哟!20 21 for i:=0;i<4 ;i++ {22 delete(yinzhengjie,i) //删除字典中key所对应的value.123 }24 fmt.Println(yinzhengjie)25 26 for k := range yinzhengjie{27 delete(yinzhengjie,k) //删除整个字典的数据28 }29 fmt.Println(yinzhengjie)30 fmt.Println(yinzhengjie==nil) //字典的“壳子”还在,空字典也是有地址的。所以返回值是false!31 }32 33 34 35 #以上代码执行结果如下:36 删除之前的样子:【map[5:f 6:g 7:h 0:a 1:b 2:c 3:d 4:e]】37 第一次删除之后的样子:【map[5:f 6:g 7:h 4:e]】38 第二次删除之后的样子:【map[]】39 字典被清空之后是否为空:【false】

 3.字典的修改操作

1 /* 2 #!/usr/bin/env gorun 3 @author :yinzhengjie 4 Blog:http://www.cnblogs.com/yinzhengjie/tag/GO%E8%AF%AD%E8%A8%80%E7%9A%84%E8%BF%9B%E9%98%B6%E4%B9%8B%E8%B7%AF/ 5 EMAIL:y1053419035@qq.com 6 */ 7  8 package main 9 10 import "fmt"11 12 func main() {13     yinzhengjie := make(map[int]string)14     letter := []string{
"a","b","c","d","e","f","g","h"}15 for k,v := range letter{16 //fmt.Println(k,v)17 yinzhengjie[k] = v18 }19 fmt.Printf("修改之前的样子:【%v】\n",yinzhengjie)20 yzj := yinzhengjie //map是一种引用类型,如果两个map同时指向一个底层,那么一个改变,另一个也相应的改变。21 yzj[0] = "尹正杰" //修改字典下标所对应的值。22 yzj[1] = "yinzhengjie"23 fmt.Printf("修改之后的样子:【%v】\n",yinzhengjie)//注意,字典是无序的哟!24 }25 26 27 28 #以上代码执行结果如下:29 修改之前的样子:【map[0:a 1:b 2:c 3:d 4:e 5:f 6:g 7:h]】30 修改之后的样子:【map[7:h 0:尹正杰 1:yinzhengjie 2:c 3:d 4:e 5:f 6:g]】

4.字典的查询方式

1 /* 2 #!/usr/bin/env gorun 3 @author :yinzhengjie 4 Blog:http://www.cnblogs.com/yinzhengjie/tag/GO%E8%AF%AD%E8%A8%80%E7%9A%84%E8%BF%9B%E9%98%B6%E4%B9%8B%E8%B7%AF/ 5 EMAIL:y1053419035@qq.com 6 */ 7  8 package main 9 10 import "fmt"11 12 func main() {13     yinzhengjie := make(map[int]string)14     letter := []string{
"a","b","c","d","e","f","g","h"}15 for k,v := range letter{16 yinzhengjie[k] = v17 }18 fmt.Println(yinzhengjie) //注意,字典是无序的哟!我下面之所以通过循环遍历,是因为的确存在哪些key哟!19 20 for i,j := range yinzhengjie{ //遍历key和value。21 fmt.Println("key=",i,"value=",j)22 }23 24 for i := range yinzhengjie{ //只遍历key25 fmt.Println(i)26 }27 }28 29 30 31 32 #以上代码执行结果如下:33 map[3:d 4:e 5:f 6:g 7:h 0:a 1:b 2:c]34 key= 6 value= g35 key= 7 value= h36 key= 0 value= a37 key= 1 value= b38 key= 2 value= c39 key= 3 value= d40 key= 4 value= e41 key= 5 value= f42 343 444 545 646 747 048 149 2

 5.原地修改字典的Value

1 /* 2 #!/usr/bin/env gorun 3 @author :yinzhengjie 4 Blog:http://www.cnblogs.com/yinzhengjie/tag/GO%E8%AF%AD%E8%A8%80%E7%9A%84%E8%BF%9B%E9%98%B6%E4%B9%8B%E8%B7%AF/ 5 EMAIL:y1053419035@qq.com 6 */ 7  8 package main 9 10 import "fmt"11 12 type Student struct {13     ID int14     NAME string15 }16 17 func main() {18     dict := make(map[int]*Student)19     dict[1] = &Student{20         ID:100,21         NAME:"yinzhengjie",22     }23 24     dict[2] = &Student{25         ID:200,26         NAME:"尹正杰",27     }28 29 30     fmt.Println(dict[1])31     s := dict[1]32     s.ID = 100000  //原地修改字典的value.33     fmt.Println(dict)34     fmt.Println(dict[1])35 }36 37 38 39 #以上代码执行结果如下:40 &{100 yinzhengjie}41 map[1:0xc042044400 2:0xc042044420]42 &{100000 yinzhengjie}

 

三.map的常用技巧

1.判断map键值是否存在

1 /* 2 #!/usr/bin/env gorun 3 @author :yinzhengjie 4 Blog:http://www.cnblogs.com/yinzhengjie/tag/GO%E8%AF%AD%E8%A8%80%E7%9A%84%E8%BF%9B%E9%98%B6%E4%B9%8B%E8%B7%AF/ 5 EMAIL:y1053419035@qq.com 6 */ 7  8 package main 9 10 import "fmt"11 12 func main() {13     yinzhengjie := make(map[int]string)14     letter := []string{
"a","b","c","d","e","f","g","h"}15 for k,v := range letter{16 yinzhengjie[k] = v17 }18 fmt.Printf("字典中的值为:【%v】\n",yinzhengjie) //注意,字典是无序的哟!19 if v, ok := yinzhengjie[1]; ok {20 fmt.Println("存在key=",v)21 }else {22 fmt.Println("没有找到key=",v)23 }24 25 v ,ok := yinzhengjie[1]26 if ok {27 fmt.Println("再一次确认,已经存在key=",v)28 }else {29 fmt.Println("再一次确认,没有找到key=",v)30 }31 }32 33 34 35 36 #以上代码执行结果如下:37 字典中的值为:【map[3:d 4:e 5:f 6:g 7:h 0:a 1:b 2:c]】38 存在key= b39 再一次确认,已经存在key= b

 

2.map的排序

  我们都知道字典的默认都是无需的,但是我们可以借用标准库的包来进行基于字母或数字的顺序来排序,从而达到我们想要的结果,我们就以2016全球计算机语言排行前十的案例来展示吧:

1 /* 2 #!/usr/bin/env gorun 3 @author :yinzhengjie 4 Blog:http://www.cnblogs.com/yinzhengjie/tag/GO%E8%AF%AD%E8%A8%80%E7%9A%84%E8%BF%9B%E9%98%B6%E4%B9%8B%E8%B7%AF/ 5 EMAIL:y1053419035@qq.com 6 */ 7  8 package main 9 10 import (11     "fmt"12     "sort"13 )14 15 func main() {16     var ProgramingLanguage = map[string]int{17         "Java":                    0,18         "C":                         1,19         "C++":                           2,20         "Python":                   3,21         "C#":                          4,22         "PHP":                       5,23         "JavaScript":             6,24         "Visual Basic.NET":         7,25         "Perl":                       8,26         "Assembly language":       9,27         "Ruby":                      10,28     }29     var SortString []string30     for k := range ProgramingLanguage {31         SortString = append(SortString, k)32     }33     sort.Strings(SortString)  //会根据字母的顺序进行排序。34     for _, k := range SortString {35         fmt.Println("Key:", k, "Value:", ProgramingLanguage[k])36     }37 }38 39 40 41 #以上代码执行结果如下:42 Key: Assembly language Value: 943 Key: C Value: 144 Key: C# Value: 445 Key: C++ Value: 246 Key: Java Value: 047 Key: JavaScript Value: 648 Key: PHP Value: 549 Key: Perl Value: 850 Key: Python Value: 351 Key: Ruby Value: 1052 Key: Visual Basic.NET Value: 7

3.map的嵌套

1 /* 2 #!/usr/bin/env gorun 3 @author :yinzhengjie 4 Blog:http://www.cnblogs.com/yinzhengjie/tag/GO%E8%AF%AD%E8%A8%80%E7%9A%84%E8%BF%9B%E9%98%B6%E4%B9%8B%E8%B7%AF/ 5 EMAIL:y1053419035@qq.com 6 */ 7  8 package main 9 10 import "fmt"11 12 type EmployeeInformation map[string]int13 14 func main() {15 16     StaffQuarters := make(map[string]EmployeeInformation)17     EmployeeNumber := make(EmployeeInformation)18     EmployeeNumber["yinzhengjie"] = 2319     EmployeeNumber["bingan"] = 2420 21     StaffQuarters["888"] = EmployeeNumber22     StaffQuarters["999"] = EmployeeInformation{
"fanbinxin": 25, "zhouzhiruo": 26,}23 fmt.Println(StaffQuarters)24 }25 26 27 28 #以上代码执行结果如下:29 map[888:map[bingan:24 yinzhengjie:23] 999:map[fanbinxin:25 zhouzhiruo:26]]

 

4.map的嵌套用法展示

 

1 /* 2 #!/usr/bin/env gorun 3 @author :yinzhengjie 4 Blog:http://www.cnblogs.com/yinzhengjie/tag/GO%E8%AF%AD%E8%A8%80%E7%9A%84%E8%BF%9B%E9%98%B6%E4%B9%8B%E8%B7%AF/ 5 EMAIL:y1053419035@qq.com 6 */ 7  8 package main 9 10 import "fmt"11 12 func main() {13     Province:=make(map[string]map[string][]string) //定义省的字典14     City:=make(map[string][]string)  //定义市区的字典15     Scenery := make(map[string][]string)  //定义景区的字典16     Scenery["西安"] = []string{    "秦始皇兵马俑","大雁塔","大唐芙蓉园","华清池","黄巢堡国家森林公园","西安碑林博物馆","骊山国家森林公园","西安城墙","秦始皇陵","翠华山",}17     Scenery["安康"] = []string{
"中坝大峡谷","香溪洞","安康双龙生态旅游度假区","瀛湖生态旅游景区","简车湾休闲景区","南宫山","天书峡景区","汉江燕翔洞景区","飞渡峡-黄安坝景区","千层河",}18 City["西安市区"]=[]string{
"新城区","碑林区","莲湖区","灞桥区","未央区","雁塔区","阎良区","临潼区","长安区","高陵区","咸阳区"}19 City["安康市区"]=[]string{
"汉滨区","汉阴县","石泉县","宁陕县","紫阳县","岚皋县","平利县","镇平县","旬阳县","白河县",}20 Province["陕西"]=City21 City["西安景区"] = Scenery["西安"]22 City["安康景区"] = Scenery["安康"]23 for k,v := range Province{24 fmt.Println(k,v)25 for x,y := range v{26 fmt.Println(x,y)27 }28 }29 }30 31 32 33 34 #以上代码执行结果如下:35 陕西 map[安康市区:[汉滨区 汉阴县 石泉县 宁陕县 紫阳县 岚皋县 平利县 镇平县 旬阳县 白河县] 西安景区:[秦始皇兵马俑 大雁塔 大唐芙蓉园 华清池 黄巢堡国家森林公园 西安碑林博物馆 骊山国家森林公园 西安城墙 秦始皇陵 翠华山] 安康景区:[中坝大峡谷 香溪洞 安康双龙生态旅游度假区 瀛湖生态旅游景区 简车湾休闲景区 南宫山 天书峡景区 汉江燕翔洞景区 飞渡峡-黄安坝景区 千层河] 西安市区:[新城区 碑林区 莲湖区 灞桥区 未央区 雁塔区 阎良区 临潼区 长安区 高陵区 咸阳区]]36 西安景区 [秦始皇兵马俑 大雁塔 大唐芙蓉园 华清池 黄巢堡国家森林公园 西安碑林博物馆 骊山国家森林公园 西安城墙 秦始皇陵 翠华山]37 安康景区 [中坝大峡谷 香溪洞 安康双龙生态旅游度假区 瀛湖生态旅游景区 简车湾休闲景区 南宫山 天书峡景区 汉江燕翔洞景区 飞渡峡-黄安坝景区 千层河]38 西安市区 [新城区 碑林区 莲湖区 灞桥区 未央区 雁塔区 阎良区 临潼区 长安区 高陵区 咸阳区]39 安康市区 [汉滨区 汉阴县 石泉县 宁陕县 紫阳县 岚皋县 平利县 镇平县 旬阳县 白河县]

 

四.map的进阶知识

1.map的挖坑

  Captial["北京"]["大兴区"]会发现这个值已经没有了,取而代之的是Captial["北京"]["密云县"]这是因为 Area 和 County 都是 map[string]int 类型的数据,Golang 直接把 ["大兴区"] 里的数据从 Area 替换成了 County,而不会递归地添加 map 中缺失的数据。

1 /* 2 #!/usr/bin/env gorun 3 @author :yinzhengjie 4 Blog:http://www.cnblogs.com/yinzhengjie/tag/GO%E8%AF%AD%E8%A8%80%E7%9A%84%E8%BF%9B%E9%98%B6%E4%B9%8B%E8%B7%AF/ 5 EMAIL:y1053419035@qq.com 6 */ 7  8 package main 9 10 import "fmt"11 12 func main() {13     Captial := make(map[string]map[string]int)14     Area := make(map[string]int)15     Area["大兴区"] = 10016     Captial["北京"] = Area17     County := make(map[string]int)18     County["密云县"] = 20019     fmt.Println(Captial["北京"]["大兴区"]) //目前是可以访问到“Captial["北京"]["大兴区"]”的值的20     Captial["北京"] = County21     fmt.Println(Captial["北京"]["大兴区"]) //但是你执行了上一行的代码,你会发现你访问不到它的值100啦,但是你却发现可以访问下面一行代码的值。22     fmt.Println(Captial["北京"]["密云县"])23 }24 25 26 27 28 #以上代码执行结果如下:29 10030 031 200

2.map的填坑

  你自己想到上面的解决方法了没?其实很简单,我们只要做一个条件判断即可,代码如下:

1 /* 2 #!/usr/bin/env gorun 3 @author :yinzhengjie 4 Blog:http://www.cnblogs.com/yinzhengjie/tag/GO%E8%AF%AD%E8%A8%80%E7%9A%84%E8%BF%9B%E9%98%B6%E4%B9%8B%E8%B7%AF/ 5 EMAIL:y1053419035@qq.com 6 */ 7  8 package main 9 10 import "fmt"11 12 func main() {13     Captial := make(map[string]map[string]int)14     Area := make(map[string]int)15     Area["大兴区"] = 10016     Captial["北京"] = Area17 18     if _, ok := Captial["北京"]; ok {19         Captial["北京"]["密云县"] = 200  //判断,如果存在Captial["北京"]这个key就只做字典的追加操作。20     }else {21         County := make(map[string]int)22         Captial["北京"] = County23         County["密云县"] = 200 //如果不存在就24     }25     fmt.Println(Captial["北京"]["大兴区"]) //可以访问到“Captial["北京"]["大兴区"]”的值100啦。26     fmt.Println(Captial["北京"]["密云县"])27 }28 29 30 31 #以上代码执行结果如下:32 10033 200

 

3.定义一个集合的思想

  了解过Python的童鞋,可能听说过集合,但是我要告诉你一个好消息和一个坏消息,你想先听哪一个?坏消息就是Golang没有集合这个概念;好消息是我们可以用Golang的make函数来实现集合的思想,下面跟我一起看个例子吧!

1 /* 2 #!/usr/bin/env gorun 3 @author :yinzhengjie 4 Blog:http://www.cnblogs.com/yinzhengjie/tag/GO%E8%AF%AD%E8%A8%80%E7%9A%84%E8%BF%9B%E9%98%B6%E4%B9%8B%E8%B7%AF/ 5 EMAIL:y1053419035@qq.com 6 */ 7  8 package main 9 10 import "fmt"11 12 func main() {13     set := make(map[string]bool) //定义一个map14     set["yinzhengjie"] = true              //给已经存在的变量定义为真15     if set["yinzhengjie"] {16         fmt.Printf("已经存在明为yinzhengjie的key,其值为【%v】\n",set["yinzhengjie"])17 18     } else {19         fmt.Println("该变量不存在!")20     }21 22     if set["yzj"] {    //判断是否 存在变量23         fmt.Println("已经存在该变量")24 25     } else {26         fmt.Printf("不存在名为“yzj”的key,其值为【%v】\n",set["yzj"])27 28     }29     fmt.Println(set)  //我们来一起查看一下这个网站吧。30 }31 32 33 34 35 #以上代码执行结果如下:36 已经存在该变量key,其值为【true】37 不存在名为“yzj”的key,其值为【false】38 map[yinzhengjie:true]

 

4.map的寻址

   golang中的map并没有保证它们的value值的地址是不可变的,因为value值的地址很有可能被重新分配。在golang中,一个容量不断增长的map可能会导致原来map中的一些元素发生rehashing,使得他们被重新分配到新的storage location上,这样可能会导致原先得到的address变得不可用。就是所谓的map member 的 not addresable。

  换句话说,在golang设计的时候,map中的value值应该是地址不可达的,就是说直接取map中的元素的地址会报错.一个修改的办法就是把value值设置成为指针的形式,这样就相当于添加了一个额外的记录(entry),即使真正需要的那个值的位置发生了变化,也可以重定向(redirection)过去。

1 /* 2 #!/usr/bin/env gorun 3 @author :yinzhengjie 4 Blog:http://www.cnblogs.com/yinzhengjie/tag/GO%E8%AF%AD%E8%A8%80%E7%9A%84%E8%BF%9B%E9%98%B6%E4%B9%8B%E8%B7%AF/ 5 EMAIL:y1053419035@qq.com 6 */ 7  8 package main 9 10 import (11     "fmt"12 )13 14 type NameType struct {  //定义一个结构体,类似Python语言中定义一个类的概念。15     Blog string16 }17 18 func main() {19     BlogAddress := make(map[string]*NameType)20     BlogAddress["yinzhengjie"] = &NameType{} //这里赋值的是指针。21     BlogAddress["yinzhengjie"].Blog = "http://www.cnblogs.com/yinzhengjie"22     fmt.Println(BlogAddress)23 }24 25 26 27 28 #以上代码执行结果如下:29 map[yinzhengjie:0xc042008230]

 

5.扩展小知识:make和new的区别

   make 只能为 slice、map或 channel 类型分配内存并初始化,同时返回一个有初始值的 slice、map 或 channel 类型引用,不是指针。内建函数 new 用来分配内存,它的第一个参数是一个类型,不是一个值,它的返回值是一个指向新分配类型零值的指针。

 

 

 

 

 

 

转载于:https://www.cnblogs.com/yinzhengjie/p/7689996.html

你可能感兴趣的文章
量子通信和大数据最有市场突破前景
查看>>
StringBuilder用法小结
查看>>
对‘初学者应该选择哪种编程语言’的回答——计算机达人成长之路(38)
查看>>
如何申请开通微信多客服功能
查看>>
Sr_C++_Engineer_(LBS_Engine@Global Map Dept.)
查看>>
非监督学习算法:异常检测
查看>>
App开发中甲乙方冲突会闹出啥后果?H5 APP 开发可以改变现状吗
查看>>
jquery的checkbox,radio,select等方法总结
查看>>
Linux coredump
查看>>
Ubuntu 10.04安装水晶(Mercury)无线网卡驱动
查看>>
Myeclipes快捷键
查看>>
我的友情链接
查看>>
ToRPC:一个双向RPC的Python实现
查看>>
Vim脚本 - 竖线'|' 和反斜线'\'
查看>>
netty框架的学习笔记 + 一个netty实现websocket通信案例
查看>>
我的友情链接
查看>>
nginx在reload时候报错invalid PID number
查看>>
神经网络和深度学习-第二周神经网络基础-第二节:Logistic回归
查看>>
Myeclipse代码提示及如何设置自动提示
查看>>
setTimeOut(),和setInterVal()调用函数加不加括号!!!
查看>>