歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Golang中slice切片的修改操作

Golang中slice切片的修改操作

日期:2017/3/1 9:48:53   编辑:Linux編程

本文主要介紹go語言中切片slice的增刪修改操作。
如果我們需要往切片中追加元素,可以使用內置的append()函數。這個函數接受一個需要被追加的切片,以及一個或者多個需要被追加的元素。如果我們需要往一個切片中追加另一個切片,那麼我們必須使用...操作符來告訴Go語言將被添加進來的切片當成多個元素。例:

s := []string{"A", "B", "C", "D", "E", "F", "G"}
t := []string{"K", "L", "M", "N"}
u := []string{"m", "n", "o", "p", "q", "r"}
s = append(s, "h", "i", "j") //添加單一的值
s = append(s, t...) //添加切片中的所有值
s = append(s, u[2:5]...) //添加一個子切片
b := []byte{'U', 'V'}
letters := "WXY"
b = append(b, letters...) //將一個字符串字節添加進一個字節切片中
fmt.Printf("%v\n%s\n", s, b)
//--------------結果----------------------
[A B C D E F G h i j K L M N o p q]
UVwxy

有時我們不僅想往切片的末尾插入項,也想往切片的前面或者中間插入項。下面的例子使用了我們自定義的 Insert() 函數,它接收一個我們要插入切片的參數、一個用於插入的切片以及需插入切片的索引位置:

func Insert(slice, insertion []interface{}, index int) []interface{} {
result := make([]interface{}, len(slice)+len(insertion))
at := copy(result, slice[:index])
at += copy(result[at:], insertion)
copy(result[at:], slice[index:])
return result
}


注意,如果所傳入的索引位置為0,那麼第一條語句中的slice[:index]為slice[:0],因此無需進行復制。類似的,如果所傳入的索引位置大於等於切片的長度,則最後一條復制語句為slice[len(slice):](即一個空切片),因此也無需復制。

使用Go語言的標准切片語法可以將元素從切片的開頭和末尾刪除,但是將其從中間刪除就費點事兒了。看看下面的例子,分別描述如何從開頭,從末尾,從中間刪除切片元素:

s := []string{"A", "B", "C", "D", "E", "F", "G"}
s = s[2:] //從開始處刪除是s[:2]子切片
e := []string{"A", "B", "C", "D", "E", "F", "G"}
e = e[:4] //從末尾處刪除是e[4:]子切片

func Remove(slice []interface{}, start, end int) []interface{} {
result := make([]interface{}, len(slice)-(end-start))
at := copy(result, slice[:start])
copy(result[at:], slice[end:])
return result
}
//--------------------另一種更為簡便的寫法-----------------------
func Remove(slice []interface{}, start, end int) []interface{} {
return append(slice[:start], slice[end:]...)
}

Golang通過Thrift框架完美實現跨語言調用 http://www.linuxidc.com/Linux/2013-09/90748.htm

golang裡如何將一個struct指針轉換成slice http://www.linuxidc.com/Linux/2013-04/83106.htm

Copyright © Linux教程網 All Rights Reserved