網頁

2022/7/11

Golang Slice len()與cap()差別

Go內建函式len()cap()用於slice的差別如下。


len()取得slice元素的個數。

cap()取得slice第一個元素於代表的array中的索引起算到最後的長度。


例如下面宣告一個字串陣列arr長度為5,雖然表面上看起來只宣告了4個元素,但實際上有5個,因為最後一個沒宣告則為字串的零值即空字串(註解以_表示)。

Slice變數s1從陣列arr索引1到3(不含)取得兩個元素為b, c,所以len(s1)為2。而用cap(s1)取得的值為s1第一個元素barr的索引起算到最後一個的長度,即b, c, d, _為4。

Slice變數s2s2索引1到最後取得的元素為c,所以len(s2)為1。而用cap(s2)取得的值為s2第一個元素carr的索引起算到最後一個的長度,即c, d, _為3。

main.go

package main

import "fmt"

func main() {
    arr := [5]string{"a", "b", "c", "d"}
    fmt.Println(arr)      // [a b c d _]
    fmt.Println(len(arr)) // 5

    s1 := arr[1:3]
    fmt.Println(s1)      // [b c]
    fmt.Println(len(s1)) // 2
    fmt.Println(cap(s1)) // 4 [b c d _]

    s2 := s1[1:]         // [c]
    fmt.Println(len(s2)) // 1
    fmt.Println(cap(s2)) // 3 [c d e]
}



沒有留言:

張貼留言