go数组/集合笔记

数组

定义数组
如:
var ar[4] int
ar[0] =2

初始化
如:
var ar1 = [4] int{1,2,3,4}
var arr2  =  [4] int{1:2,3:2} //下标1值2 下标3值为2
var arr3 = [...]int{1, 2, 3, 4} //[]中用...代替表示数组大小浮动的

len(arr3) 得到长度

//range遍历:
for i,v := range arr3{
    fmt.Print(i)
    fmt.Print(v)
}
//类似java的foreach for(:) 不过range可以得到index


//多维数组定义
var ar1 = [4][5] int{{1,2,3,4},{1,2,3,4},{1,2,3,4}}

 

切片slice

因为数组长度是固定的 所以引入了切片 可以认为是长度可变的数组
语法与数组类似 []中不定义长度
定义:
数组定义:var ar1 = [4] int{1,2,3,4}
切片定义:var ar1 = [] int{1,2,3,4}
或通过make定义切片 make([]type, len, cap) len长度 cap最大容量
    var arr1 = make([]int, 3)
    arr1[0] = 1


例子
var arr2 = make([]int, 23) //长度2 容量3
slice1[0]=1
slice1[1]=1
slice1[2]=1//报错 因为初始长度为2 再往里面添加需扩容 扩容用下面的方式
slice1 = append(slice1,2,3,4,5,6,7)//用append扩容

//当触发扩容时 容量*2 
//有点类似java的 new hashmap(容量)扩容

//切片值也可以截取数组来获取 类似js的slicevar arr4 = [4] int{1,2,3,4}
    s2:=arr4[0:3] //下标0到3的值


//拷贝  类似java beanutils.copy()
var s1 = [] int{1,2,3,4}
var s2 = [] int{5,6,7}
copy(s1,s2)   //s2拷贝到s1 s1值{5,6,7,4} 
copy(s1,s2[2:])//s2下标2后值都拷贝到s1  s1值{7,2,3,4}

 

map

//map定义
var m1 map[int] string
var m2 = make(map[int]string) //make定义
var m3 = map[int]string{1:"one",2:"two"}

//java中map添加数据有get put的api 
//go添加查询挺像操作数组 
m1[0]="one" //报错 m1的定义方式无法操作 这个要注意 一般用make定义map
m2[0]="one" //添加one 类似java的map.put(0,"one")

//删除map
delete(m1,0) //删除m1中key为0的值
//切片中添加map var silm = make([]map[int] string,3,4) //定义切片就多写一个[] silm = append(silm, m2) silm = append(silm, m3)

 

strings

strings包
strings.Contains("abcde", "ab") //字符串”abcde“是否包含”ab“
strings.ContainsAny("abcde","ak") //后面字符串任意字符是否与前参数一致 true
strings.Count("abcde","ab") //ab字符串出现次数
strings.HasPrefix("abcde","ab") //是否以”ab“开头
strings.HasSuffix("abcde","de")//是否以”de“结尾
strings.Index("abcde","cd") //cd最初出现的下标
strings.IndexAny("abcde","ce") //ce任意字符最初出现的下标
strings.LastIndex("abcde","cd") //ce最后出现的下标
strings.Join(数组,拼接字符串) //将数组拼接成字符
strings.Split(字符串,切割符号) //将字符串切割成数组
strings.Repeat("hello",2) //输出hellohello
strings.Replace("hello", "e", "a", 2)//字符串出现e替换为a 有出现2次替换 -1所以都替换
strings.ToLower("") //字符串都替换小写
strings.ToUpper("") //字符串都替换大写

 

strconv

strconv包
java中字符串+任意类型都能变成字符串 如"1"+100 输出"1100"
但是go不支持 不同类型不能直接转 需要通过strconv

strconv.Atoi("3")  //将字符串转int
strconv.Itoa(3)   //int转字符串

//同上 通过strconv和idea配合 能快速定位到需要的api
strconv.ParseBool("true")
strconv.FormatBool(true)

 

list链表

//初始化list
变量名 := list.New()
var 变量名 list.List

//插入元素
l := list.New()
l.PushBack("first") //插入链表尾部
l.PushFront(67)  //插入链表头部
l.InsertAfter("height","first") //在元素"first"后插入元素"height"
l.InsertBefore("height","first") //在元素"first"前插入元素"height"

l.Remove("first")  //移除元素"first"


//遍历list
for i:=l.Front();i!=nil;i=i.Next(){
  fmt.Println(i,Value)  
}

 

posted @ 2021-04-08 14:17  小白小白小白小白  阅读(133)  评论(0)    收藏  举报