標籤:
1. array
同一類型資料的集合
var arr [n]type //聲明type類型一維數組
var arr [m][n]type //聲明type類型二維數組
多維陣列以此類推
也可以用 := 聲明
arr := [n]type{元素1[,元素2, ...]} 其中n可以用 "..." 三個點表示,系統會根據元素個數來確定
下標只能為 int 類型,而 php 還支援 string 類型的下標
1.1 數組長度 len(arr)
註:數組長度在定義後就不可變
1.2 遍曆:
a. 迴圈通過過數組下標訪問 arr[0] ~ arr[(len(arr))]
b. range arr, 有兩個傳回值 第一個為數組下標,第二個為元素的值,與php遍曆數組相似
[plain] view plaincopyprint?
- for k, v := range array {
- fmt.Printf("arr[%d] = %d \t", k, v)
- }
[php] view plaincopyprint?
- foreach ($arr as $k => $v) {
- printf("arr[%d] = %d \t", $k, $v);
- //echo ‘$arr[‘ . $k . "] = " . $v . "\t";
- }
1.3 數組在賦值與傳遞參數時,都會產生一個數組副本,而不是使用它的指標
2. slice
在定義 array 時,其長度是固定的,並且 array 是一個實值型別
而 slice 是一個可變的數組,但是一個參考型別
2.1 產生slice的三種方式
a. 聲明與 array 一樣,不過不需要指定長度
var slice1 []int
slice2 := []int {元素1[, 元素2, ...]}
b. 從數組(或者切片或者字串)中擷取 arr[i:j] i=數組的開始位置,j=結束位結果,j-i=切片的長度,i和j都可以省略,省略時 i=0, j=len(arr),i是從0開始,j是從1開始
a b c d e f
i 0 1 2 3 4 5
j 1 2 3 4 5 6
[plain] view plaincopyprint?
- slice1 := arr[:] //arr[0:6]/arr[0:]
- slice2 := arr[1:1] //[]
- slice4 := arr3[1:3] //b c
- slice5 := arr3[:5] // = arr3[0:5]
c. make
slice1 := make([]int, 5, 10)
len(slice1) = 5, cap(slice1) = 10, 元素的初始值為0
2.2 相關函數
len(slice): 返回 slice 的元素個數(長度)
cap(slice): 返回 slice 的分配空間大小
append(slice1, slice2...): 把 slice2 追加到 slice1 產生新的 slice, 若 slice2 是變數時,不能省略...,相當於 append(slice1, a[, b, ...])
copy(目標slice, 源slice): 以最小的切片元素個數為準,將源 slice 複製到 目標 slice
2.3 cap - len = 0 時,系統將動態分配新的數組空間,即切片會自動處理儲存空間不足的問題
2.4 遍曆與 array 一樣
2.5 在傳遞參數時,傳遞的為指標
【轉】 golang slice array