GO語言————7.5 切片的複製與追加
7.5 切片的複製與追加
如果想增加切片的容量,我們必須建立一個新的更大的切片並把原分片的內容都拷貝過來。下面的程式碼描述了從拷貝切片的 copy 函式和向切片追加新元素的 append 函式。
示例 7.12 copy_append_slice.go
package main
import "fmt"
func main() {
sl_from := []int{1, 2, 3}
sl_to := make([]int, 10)
n := copy(sl_to, sl_from)
fmt.Println(sl_to)
fmt.Printf("Copied %d elements\n", n) // n == 3
sl3 := []int{1, 2, 3}
sl3 = append(sl3, 4, 5, 6)
fmt.Println(sl3)
}
func append(s[]T, x ...T) []T
其中 append 方法將 0 個或多個具有相同型別 s 的元素追加到切片後面並且返回新的切片;追加的元素必須和原切片的元素同型別。如果 s 的容量不足以儲存新增元素,append 會分配新的切片來保證已有切片元素和新增元素的儲存。因此,返回的切片可能已經指向一個不同的相關陣列了。append 方法總是返回成功,除非系統記憶體耗盡了。
如果你想將切片 y 追加到切片 x 後面,只要將第二個引數擴充套件成一個列表即可:x = append(x, y...)
。
注意: append 在大多數情況下很好用,但是如果你想完全掌控整個追加過程,你可以實現一個這樣的 AppendByte 方法:
func AppendByte(slice []byte, data ...byte) []byte {
m := len(slice)
n := m + len(data)
if n > cap(slice) { // if necessary, reallocate
// allocate double what's needed, for future growth.
newSlice := make([]byte, (n+1)*2)
copy(newSlice, slice)
slice = newSlice
}
slice = slice[0:n]
copy(slice[m:n], data)
return slice
}
func copy(dst, src []T) int
copy 方法將型別為 T 的切片從源地址 src 拷貝到目標地址 dst,覆蓋 dst 的相關元素,並且返回拷貝的元素個數。源地址和目標地址可能會有重疊。拷貝個數是 src 和 dst 的長度最小值。如果 src 是字串那麼元素型別就是 byte。如果你還想繼續使用 src,在拷貝結束後執行 src = dst
。
練習 7.9
給定 slice s[]int
和一個 int 型別的因子,擴充套件 s 使其長度為 len(s) * factor
。
練習 7.10
用順序函式過濾容器:s 是前 10 個整型的切片。構造一個函式 Filter,第一個引數是 s,第二個引數是一個 fn func(int) bool
,返回滿足函式 fn 的元素切片。通過 fn 測試方法測試當整型值是偶數時的情況。
練習 7.11
寫一個函式 InsertStringSlice 將切片插入到另一個切片的指定位置。
練習 7.12
寫一個函式 RemoveStringSlice 將從 start 到 end 索引的元素從切片 中移除。
相關文章
- go 語言切片Go
- Go語言————7.2 切片Go
- Go語言複製檔案Go
- GO語言學習——切片二Go
- 檔案複製(Go語言實現)Go
- Go 語言切片是如何擴容的?Go
- GO語言————8.4 map 型別的切片Go型別
- Go語言————7.4 切片重組(reslice)Go
- Go 語言學習筆記之陣列與切片Go筆記陣列
- Python 列表切片陷阱:引用、複製與深複製Python
- go語言之陣列與切片Go陣列
- go語言學習-陣列-切片-mapGo陣列
- 聊聊Go語言中的陣列與切片Go陣列
- 《快學 Go 語言》第 5 課 —— 神奇的切片Go
- Go 語言基礎 陣列、切片、對映Go陣列
- Go語言系列(三)之陣列和切片Go陣列
- go語言使用切片實現線性表Go
- Go 語言傳值和深淺複製問題Go
- Go語言中切片slice的宣告與使用Go
- 《快學 Go 語言》第 5 課 —— 靈活的切片Go
- GO語言————7.6 字串、陣列和切片的應用Go字串陣列
- Go 語言中的 切片 --sliceGo
- Go語言切片面試真題7連問Go面試
- 帶讀 |《Go in Action》(中文:Go語言實戰) 深入瞭解切片Go
- go語言與c語言的相互呼叫GoC語言
- Day 7.5 資料型別總結 + 複製 淺複製 深複製資料型別
- 【Go 語言入門專欄】Go 語言的起源與發展Go
- go陣列與切片Go陣列
- python中切片的淺複製探究Python
- go的深複製跟淺複製Go
- Go 語言在命令列以表格的形式輸出結構體切片Go命令列結構體
- Go 語言切片的三種特殊狀態 —— 90% 的開發者都忽視了Go
- 使用Go語言製作二維碼Go
- java語言複製陣列的四種方法Java陣列
- Go 語言的GOPATH與gomod,新手坑Go
- go語言 變數的宣告與使用Go變數
- Go語言————1、初識GO語言Go
- (八)Redis 主從複製、切片叢集Redis