[前言]
陣列(Array)就好比是單排座位的列車,座位編號從0開始,共有N個座位且不可增加座位數量。
切片(Slice)很像陣列(Array),但它是可以增加座位數量。 Slice細節還有關於容量與長度的問題,我們就先忽略它~
所以,這兩種資料結構可以存放一長串的資料,這是在寫小遊戲中非常常使用到的功能。
[陣列(Array)]
陣列(Array):它的長度是固定的(fixed length),使用語法: " [數量] 型別" 定義。例如: [100]int
它比較沒有彈性,內部存放的資料都必須要有相同的型別(像是整數、字串等等)。
已經學習過變數宣告,我們舉兩個例子(變數宣告與變數短宣告)來宣告變數型別為陣列:
// 變數宣告
var myArr [2]string
var myArr [2]string
a[0] = "Hi"
a[1] = "There"
// 變數短宣告
myArr2 := [2]int{100, 50}
[切片(Slice)]
Slice:可以增加或減少Slice內資料的數量,使用 [] 定義,例如,[]int 是 int slice,指元素為 int 的 slice;[]string 是 string slice,指資料為 string 的 slice。建立Slice有下列幾種方式:
方式1:建立一個帶有某種型別的 slice,用在知道 slice 裡面的元素有哪些時,例如字串slice
names := []string{"Tom", "John"}
方式2:透過 make 可以建立空 slice,適合用會對 slice 中特定位置元素進行操作時
people := make([]int, 5)
說明: 不指定capacity會與length相同。
len=5 cap=5,[0,0,0,0,0]
方式3:大該知道需要多少元素時使用,同時給定length 與 capacity,搭配 append 使用
people := make([]string, 0, 5, 10)
說明: 這邊先暫時不多解釋capacity的意義。
len=5 cap=10, [0,0,0,0,0]
[練習時間]
我們來練習剛剛教過的例子:
names := []string{"Tom", "John"}
fmt.Println("names:", names, "長度:", len(names), "容量:", cap(names))
score1 := make([]int, 5) // len=4 cap=4,[0,0,0,0,0]
fmt.Println("score1:", score1, "長度:", len(score1), "容量:", cap(score1))
var names2 []string
names2 = names
names2[0] = "Danny"
fmt.Println("names2:", names2, "長度:", len(names2), "容量:", cap(names2))
score2 := make([]int, 5, 10) // len=5 cap=10, [0,0,0,0,0]
score2[3] = 100
fmt.Println("score2:", score2, "長度:", len(score2), "容量:", cap(score2))
結果:
names: [Tom John] 長度: 2 容量: 2
score1: [0 0 0 0 0] 長度: 5 容量: 5
names2: [Danny John] 長度: 2 容量: 2
score2: [0 0 0 100 0] 長度: 5 容量: 10
No comments:
Post a Comment