语言基础

54 阅读2分钟

数组

一维

声明 在栈分配内存

var a [10]int  //默认都是0/""/false
&a  //数组地址,也是a[0]地址;地址间隔按数组类型所占字节决定

初始化

    var arr [3]int = [3]int{1, 2, 3}
    var arr1 = [3]int{1, 2, 3}
    arr2 := [...]int{1, 2, 3}  

遍历

常规
range
    var arr [3]int = [3]int{1, 2, 3}
    for i, v := range arr {
        fmt.Printf("%d%d ",i,v)
    }

传参

func f(arr *[3]int) {
    (*arr)[0] = 1
}
func main() {
    var arr [3]int
    f(&arr)
}

二维

声明

var a [10][10]int  //arr[i]存储地址指向arr[i][0]

初始化

i := [...][2]int{{1,2},{3,4}}
var arr [2][2]int = [...][2]int{{1,2},{3,4}}
var arr = [...][2]int{{1,2},{3,4}}

传参

排序/查找

内部排序:将数据加载到内存排序

  • 交换式、选择式、插入式

外部排序:无法全部加载到内存,借助外部存储进行排序

  • 合并排序、直接合并排序

冒泡

func main() {
    i := [...]int{2, 4, 1, 46, 2, 76}
    for j := 0; j < len(i)-1; j++ {
        for k := 0; k < len(i)-1-j; k++ {
            if i[k] > i[k+1] {
                b := i[k]
                i[k] = i[k+1]
                i[k+1] = b
            }
        }
    }
}

二分

数组有序

func f(n int, arr [5]int, l int, r int) {
    if l > r {
        fmt.Println("没有")
        return
    }
    m := (r + l) / 2
    if arr[m] > n {
        f(n, arr, l, m-1)
    } else if arr[m] < n {
        f(n, arr, m+1, r)
    } else {
        fmt.Println(m)
    }
}
func main() {
    n := 5
    i := [...]int{1, 3, 5, 8, 9}
    f(n, i, 0, len(i)-1)
​
}

map

key和value可以是:bool、数字、string、指针、channel;包含前面类型的接口、结构体、数组

声明

var a map[keytype]valuetype

初始化

a := make(map[string]string,10)  //长度10
b := map[string]string{
    "a":"b",
    "c":"d",
}
len(b)  //2

crud

添加 / 修改
    b["e"] = "f"
删除 : key不存在也不报错
    delete(b,"a") 
查找 : true/false
    cities["a"]

遍历

    var a map[string]string
    a = make(map[string]string, 2)
​
    a["name"] = "hcf"
    a["age"] = "21"
    for k1, v1 := range a {
        fmt.Printf("%s=%s",k1,v1)
    }

map切片

初始化
    m := make([]map[string]string, 2)  //m=[map[] map[]]
    m[0] = make(map[string]string, 1)
赋值/修改
    m[0]["name"]="hcf"    //m=[map[name:hcf] map[]]

append

    b := map[string]string{
        "a": "b",
        "c": "d",
    }
    m = append(m, b) //[map[name:hcf] map[] map[a:b c:d]]

遍历

    for k, v := range m {
        fmt.Println(k)
        for k1, v1 := range v {
            fmt.Printf("%s=%s ", k1, v1)
        }
    }