go語言學習-數組, slice和map

數據結構 數組 slice map

數組爲值傳遞,當賦值給另一個變量的時候是將值所有都copy,存一個副本,改變副本的值不會改變原有數組。slice爲指針傳遞,改變值會改變原有slice中存的值git

數組

數組定義後長度固定github

長度獲取: len() 函數golang

全部的值類型變量在賦值,和做爲參數傳遞時都將產生一次複製動做。數組

go數組是一個值類型,在函數體中沒法修改傳入的數組的內容,由於函數內操做的只是所 傳入數組的一個副本數據結構

在數組中類型和長度共同肯定一個數組類型,也就是說[5]int 和[10]int 不是一個類型app

建立

  1. 聲明: var myArray [5]int
  2. 推導: myArray := [3]int{1, 2, 3}
  3. 省略方式: myArray := [...]int{1,2,3}

slice 切片

建立

  1. 從數組上切一片, slice1 = myArray[:5]
  2. 使用make, slice2 := make([]int, 5)
  3. 默認方式: slice3 := []int{1, 2, 3, 4, 5}, 事實上回建立一個匿名數組,不須要咱們管
  4. 從切片上切一片: slice4 = slice1[:7] // 能夠超過原有len(),可是不能超過cap(),多出來的部分補上零值(0)

添加 append

  1. 使用 append 添加元素:
mySlice2 := []int{8, 9, 10}
// 給mySlice後面添加另外一個數組切片
mySlice = append(mySlice, mySlice2...)

// ... 表示散列slice, 不加編譯錯誤.加上省略號相 7 當於把mySlice2包含的全部元素打散後傳入

copy

用於將內容從一個數組切片複製到另外一個 數組切片。若是加入的兩個數組切片不同大,就會按其中較小的那個數組切片的元素個數進行 複製.函數

slice1 := []int{1, 2, 3, 4, 5}
slice2 := []int{5, 4, 3}

copy(slice2, slice1) // 只會複製slice1的前3個元素到slice2中
copy(slice1, slice2) // 只會複製slice2的3個元素到slice1的前3個位置

其餘操做

SliceTricksurl

remove

Remove elements in slice指針

urlList := []string{"test", "abc", "def", "ghi"}
remove := []string{"abc", "test"}

for i := 0; i < len(urlList); i++ {
    url := urlList[i]
    for _, rem := range remove {
        if url == rem {
            urlList = append(urlList[:i], urlList[i+1:]...)
            i-- // Important: decrease index
            break
        }
    }
}

fmt.Println(urlList)

orcode

package main

import "fmt"

func main() {
    urlList := []string{"test", "abc", "def", "ghi"}
    remove := []string{"abc", "test"}

    new_list := make([]string, 0)

    my_map := make(map[string]bool, 0)
    for _, ele := range remove {
        my_map[ele] = true
    }

    for _, ele := range urlList {
        _, is_in_map := my_map[ele]
        if is_in_map {
            fmt.Printf("Have to ignore : %s\n", ele)
        } else {
            new_list = append(new_list, ele)    
        }
    }

    fmt.Println(new_list)

}

map

建立

  1. 聲明並不會建立map : var myMap map[string]string nil, 不能賦值
  2. 使用make賦值: myMap = make(map[string]string), 能夠指定容量 myMap = make(map[string]string, 100)
  3. 推導: myMap := map[string]string{"1234": "Jack"}

添加

map[key] = value , 直接賦值

刪除

delete(myMap, key), 若是key不存在,則什麼都不會發生,沒反作用,可是若是map爲nil,則panic

是否存在

value, ok := map[key] ,ok 爲true 找到

相關文章
相關標籤/搜索