This commit is contained in:
Unknwon
2015-02-11 00:02:04 -05:00
parent aab0a67c9a
commit c01f18f8e4

View File

@@ -110,4 +110,31 @@ func SearchStrings(a []string, x string) int
## 7.6.7 append 函数常见操作
我们在第 7.5 节提到的 append 非常有用,它能够用于各种方面的操作:
1. 将切片 b 的元素追加到切片 a 之后:`a = append(a, b...)`
2. 复制切片 a 的元素到新的切片 b 上:
```go
b = make([]T, len(a))
copy(b, a)
```
3. 删除位于索引 i 的元素:`a = append(a[:i], a[i+1:]...)`
4. 切除切片 a 中从索引 i 至 j 位置的元素:`a = append(a[:i], a[j:]...)`
5. 为切片 a 扩展 j 个元素长度:`a = append(a, make([]T, j)...)`
6. 在索引 i 的位置插入元素 x`a = append(a[:i], append([]T{x}, a[i:]...)...)`
7. 在索引 i 的位置插入长度为 j 的新切片:`a = append(a[:i], append(make([]T, j), a[i:]...)...)`
8. 在索引 i 的位置插入切片 b 的所有元素:`a = append(a[:i], append(b, a[i:]...)...)`
9. 取出位于切片 a 最末尾的元素 x`x, a = a[len(a)-1], a[:len(a)-1]`
10. 将元素 x 追加到切片 a`a = append(a, x)`
因此,您可以使用切片和 append 操作来表示任意可变长度的序列。
从数学的角度来看,切片相当于向量,如果需要的话可以定义一个向量作为切片的别名来进行操作。
如果您需要更加完整的方案,可以学习一下 Eleanor McHugh 编写的几个包:[slices](http://github.com/feyeleanor/slices)、[chain](http://github.com/feyeleanor/chain) 和 [lists](http://github.com/feyeleanor/lists)。
## 7.6.8 切片和垃圾回收
182