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函數(shù)
? fmt.Println("copying slice")
copy(s2,s1)
printlnSlice(s2)
//刪除,系統(tǒng)沒有內(nèi)建函數(shù)所禀,使用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,可以復(fù)合map[key1]map[key2]value
func mapStudy() {
m :=map[string]string{
"name":"小強(qiáng)",
"course":"golang",
"site":"imooc",
"quality":"notbad",
}
fmt.Println(m)
//使用make函數(shù)定義
? m1 := make(map[string]int)//m1 == empty map
? fmt.Println(m1)
//使用var來定義
? var m2map[string]int//m2 == nil,go語言的nil可以參與運(yùn)算
? 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寫錯(cuò)里也可以取出一個(gè)空值振坚,不會(huì)報(bào)錯(cuò)羊娃,可以使用"ok"來判斷存不存在這個(gè)key
? if name,ok := m["ndme"];ok {
fmt.Println(name)
}else {
fmt.Println("key不存在")
}
//刪除元素,delet函數(shù)
? fmt.Println("刪除元素")
name,ok := m["name"]
fmt.Println(name,ok)
delete(m,"name")
name,ok = m["name"]
fmt.Println(name,ok)
/*
創(chuàng)建:make(map[k]v)
獲取元素:m[k]
key不存在時(shí)熏挎,不會(huì)報(bào)錯(cuò)像棘,獲得value類型的初始值
用value夭谤,ok := m【key】來判斷是否存在key
用delete刪除一個(gè)key;delect(m,"key")
map的遍歷
使用range遍歷key,或者遍歷key,value對(duì)
不保證遍歷順序港粱,如需順序搀菩,需要手動(dòng)對(duì)key排序
使用len獲得元素的個(gè)數(shù)
map的key
map使用哈希表呕臂,必須可以比較相等
除了slice,map秕磷,function的內(nèi)建類型都可以作為key
Struct類型不包含上述字段诵闭,也可以作為key
*/
}
//例子:尋找最長(zhǎng)不含有重復(fù)字符串的字串 abcabcbb->abc bbbbb->b pwwkew->wke
func main() {
//slice操作
? sliceStudy()
//
? mapStudy()
}