package main
import "fmt"
//slice操作
func sliceStudy() {
s1 := []int{2,4,6,8}
printlnSlice(s1)
//不知道值可以使用make
s2 := make([]int,16)//len是16
s3 := make([]int,10,32)//len是10,cap是32
printlnSlice(s2)
printlnSlice(s3)
//copy函数
fmt.Println("copying slice")
copy(s2,s1)
printlnSlice(s2)
//删除,系统没有内建函数,使用append来做
fmt.Println("deleting elements form slice")
s2 = append(s2[:3],s2[4:]...)
printlnSlice(s2)
//删除头尾
fmt.Println("poping form front")
front := s2[0]
s2 = s2[1:]
fmt.Println(front)
printlnSlice(s2)
fmt.Println("poping form back")
tail := s2[len(s2)-1]
s2 = s2[:len(s2) -1]
fmt.Println(tail)
printlnSlice(s2)
}
func printlnSlice(s []int) {
fmt.Printf("s = %v,len(s) = %d,cap(s) = %d\n",s,len(s),cap(s))
}
//map[key]value,可以复合map[key1]map[key2]value
func mapStudy() {
m :=map[string]string{
"name":"小强",
"course":"golang",
"site":"imooc",
"quality":"notbad",
}
fmt.Println(m)
//使用make函数定义
m1 := make(map[string]int)//m1 == empty map
fmt.Println(m1)
//使用var来定义
var m2map[string]int//m2 == nil,go语言的nil可以参与运算
fmt.Println(m2)
//使用range遍历map,key在map里是无序的
fmt.Println("遍历map")
for k,v :=range m{
fmt.Println(k,v)
}
//map的操作
fmt.Println("map的操作")
courseName,ok := m["course"]
fmt.Println(courseName,ok)
//key写错里也可以取出一个空值,不会报错,可以使用"ok"来判断存不存在这个key
if name,ok := m["ndme"];ok {
fmt.Println(name)
}else {
fmt.Println("key不存在")
}
//删除元素,delet函数
fmt.Println("删除元素")
name,ok := m["name"]
fmt.Println(name,ok)
delete(m,"name")
name,ok = m["name"]
fmt.Println(name,ok)
/*
创建:make(map[k]v)
获取元素:m[k]
key不存在时,不会报错,获得value类型的初始值
用value,ok := m【key】来判断是否存在key
用delete删除一个key;delect(m,"key")
map的遍历
使用range遍历key,或者遍历key,value对
不保证遍历顺序,如需顺序,需要手动对key排序
使用len获得元素的个数
map的key
map使用哈希表,必须可以比较相等
除了slice,map,function的内建类型都可以作为key
Struct类型不包含上述字段,也可以作为key
*/
}
//例子:寻找最长不含有重复字符串的字串 abcabcbb->abc bbbbb->b pwwkew->wke
func main() {
//slice操作
sliceStudy()
//
mapStudy()
}