zoukankan      html  css  js  c++  java
  • 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)  
    }
  • 相关阅读:
    Mysql的select加锁分析
    浅析Kubernetes的工作原理
    HTTP/2部署使用
    Amazon新一代云端关系数据库Aurora
    为什么 kubernetes 天然适合微服务
    深入解读Service Mesh背后的技术细节
    微服务的接入层设计与动静资源隔离
    Prim算法和Kruskal算法介绍
    DAG及拓扑排序
    BFS和DFS
  • 原文地址:https://www.cnblogs.com/hbhb/p/14631989.html
Copyright © 2011-2022 走看看