首頁 > 後端開發 > Golang > 如何將 Go 切片轉換為固定大小的陣列?

如何將 Go 切片轉換為固定大小的陣列?

Susan Sarandon
發布: 2024-11-19 01:06:02
原創
1005 人瀏覽過

How do I convert a Go slice to a fixed-size array?

將切片轉換為固定大小數組

通常會遇到需要將切片轉換為固定大小數組的情況。在 Go 中,切片是可以增長和收縮的動態資料結構,而陣列是固定大小的,必須使用特定大小進行初始化。

考慮以下程式碼:

func gen(bricks []Brick) {
    if len(bricks) == 16 {
        if check(Sculpture{bricks}) {
            var b [16]Brick = bricks[0:16]; // Error: Cannot assign slice to array
        }
    }
}
登入後複製

在此在程式碼中,我們嘗試將名為bricks的切片轉換為固定大小的陣列b。但是,這會導致錯誤,因為切片和陣列具有不同的類型。

使用副本

要將切片轉換為固定大小的數組,可以使用副本功能。複製函數將元素從一個切片或陣列複製到另一個切片或陣列。它需要兩個參數:目標切片或陣列以及來源切片或陣列。

以下範例示範如何使用複製將切片轉換為陣列:

slice := []byte("abcdefgh")

var arr [4]byte

copy(arr[:], slice[:4])

fmt.Println(arr)
登入後複製

在此例如,copy 函數將切片的前四個位元組複製到 arr 陣列。產生的陣列將包含值 [97 98 99 100]。

使用切片到數組的轉換(Go 1.17 )

在Go 版本1.17 及更高版本中,引入了一項新功能來支援切片到數組的轉換。這允許您直接將切片指派給數組指針,而無需使用複製函數。

以下範例示範了切片到陣列轉換的使用:

s := make([]byte, 2, 4)
s0 := (*[0]byte)(s)      // s0 != nil
s1 := (*[1]byte)(s[1:])  // &s1[0] == &s[1]
s2 := (*[2]byte)(s)      // &s2[0] == &s[0]
// s4 := (*[4]byte)(s)      // panics: len([4]byte) > len(s)
登入後複製

在此範例中,我們建立一個切片s,然後用它來初始化三個陣列指標:s0、s1和s2。 s0 是指向零長度數組的指針,s1 是指向包含一個元素的數組的指針,s2 是指向包含兩個元素的數組的指針。

請注意,此功能僅適用於以下切片:由底層陣列支援。如果切片沒有數組支持,您仍然需要使用複製函數將其轉換為數組。

以上是如何將 Go 切片轉換為固定大小的陣列?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板