go-array/slice

关于 array 和 slice 的常用方法。

切片(Slice)

可以理解为长度可变的数组

定义

  1. 先声明一个变量是切片,然后使用内置函数 make 去初始化这个切片
// 通过声明一个未指定大小的数组来定义切片
var identifier []type

var arr []string
slice1 := make([]type, len)

s :=[] int {1,2,3 }

var x = make([]float64, 5)
fmt.Println("Capcity:", cap(x), "Length:", len(x))
var y = make([]float64, 5, 10)
fmt.Println("Capcity:", cap(y), "Length:", len(y))

b := make([]int, 0, 5) // len(b)=0, cap(b)=5

二维数组

type Matrix [][]int

func constructMatrix(rows, cols int) Matrix {
m := make([][]int, rows)
for i := 0; i < rows; i++ {
m[i] = make([]int, cols)
}
return m
}

var arry [2][3] int

for index,value := range arry {
fmt.Print(index,":")
for i,_ := range value {
fmt.Print(i)
}
fmt.Println()
}
  1. 通过取数组切片来赋值
    采用 [low_index:high_index] 的方式获取数值切片,其中切片元素包括 low_index 的元素,但是不包括 high_index 的元素
var arr1 = [5]int{1, 2, 3, 4, 5}
var s1 = arr1[2:3]
var s2 = arr1[:3]
var s3 = arr1[2:]
var s4 = arr1[:]

清除 clear

termianlParam = nil
termianlParam = make([]*pb.ParamInfo, 0, 50)

遍历

var arr1 = [5]int{1, 2, 3, 4, 5}
for i, v := range arr1 {
fmt.Printf("2**%d = %d\n", i, v)
}

获取最后一个元素

item := arr[len(arr) - 1]

prepend

package main
import "fmt"
func main () {
data := []string{"A", "B", "C", "D"}
data = append([]string{"Prepend Item"}, data...)
fmt.Println(data)
// [Prepend Item A B C D]
}

追加数据

var arr1 = make([]int, 5, 10)
arr1 = append(arr1, 5, 6, 7, 8)

slice = append(slice, elem1, elem2)
slice = append(slice, anotherSlice...)

第一种用法中,第一个参数为 slice,后面可以添加多个参数。
如果是将两个 slice 拼接在一起,则需要使用第二种用法,在第二个 slice 的名称后面加三个点,而且这时候 append 只支持两个参数,不支持任意个数的参数。

全部复制

// 数组a
a := []int{1, 2, 3}
// 生命数组b,大小和a一样
b := make([]int, len(a))
// 使用copy
copy(b, a)
// 修改a
a[1] = -1
// 输出a和b
fmt.Println(a)
fmt.Println(b)

[1 -1 3]
[1 2 3]

部分复制

// 数组a
a := []int{1, 2, 3}
// 数组b,大小还是和a一样
b := make([]int, len(a))
// 部分复制,把a的最后两个元素复制到b的最后两个元素中,b的大小和a还是一样
copy(b[1:], a[1:])
// 修改a
a[1] = -1
// 输出a和b
fmt.Println(a)
fmt.Println(b)

[1 -1 3]
[0 2 3]