1. 程式人生 > >go語言基礎資料結構學習---- 陣列, 列表(list)和切片(slice)

go語言基礎資料結構學習---- 陣列, 列表(list)和切片(slice)

go語言基礎資料結構學習–> 陣列, 列表(list)和切片(slice)

go 語言中的  陣列是型別相同的元素的集合, 
            列表是雙鏈表的容器, 可以新增不同型別的資料
            切片是對現有陣列的引用, 比陣列更方便靈活, 還可以追加資料
package main

import (
    "container/list"
    "fmt"
)

func main() {
    // 切片 slice  比較常用, 很靈活
    list1 := [6]int{1,2,3,4}   //6是總數, 後面是值, 如果不夠會自動補0
    list6 := []string{"a", "b"}
    var list2 [3]int
    // 宣告列表, 下面兩種為初始化, 生成記憶體地址, 雙鏈表 ----容器
    var list3 = list.List{}
    list4 := list.New()
    //多維陣列
    list5 := [3][2]string{
        {"飛", "小"},
        {"祥", "泰"},
        {"德", "丙"},
    }


    //列表插入方法
    a1 := list3.PushFront(2) //從左插入
    a2 :=list3.PushBack(1)  //從右插入
    list3.InsertAfter("after", a2)   //在 a2之後
    list3.InsertBefore("before", a1) //在 a1之前

    //列表刪除
    list3.Remove(a2)

    //列表(容器)遍歷
    for x := list3.Front(); x != nil; x = x.Next() {
        if x.Value == "after" {
            fmt.Println(x.Value)
        }
        fmt.Print(x.Value, " , ")
    }
    //切片遍歷
    for _,x := range list1{
        if x == 1{
            fmt.Println(x)
        }
    }
    //切片追加
    list6 = append(list6, "c")
    //也可以和python一樣根據索引覆蓋值
    list1[5] = 9
    list2[2] = 9

    
    fmt.Println(list1)
    fmt.Println(list2)
    printlist(list3)
    fmt.Println(list4)
    fmt.Println(list5)
    fmt.Println(list6)
}

func printlist(lists list.List)  {
    for x := lists.Front(); x != nil; x = x.Next() {
        fmt.Println(x.Value)
    }
}

參考學習文件:
https://www.cnblogs.com/liuzhongchao/p/9159896.html
http://c.biancheng.net/view/35.html