From c01f18f8e4a0ff412de3b9242206ef19b1296cfd Mon Sep 17 00:00:00 2001 From: Unknwon Date: Wed, 11 Feb 2015 00:02:04 -0500 Subject: [PATCH] 7.6.7 --- eBook/07.6.md | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/eBook/07.6.md b/eBook/07.6.md index a84d413..3f423dc 100644 --- a/eBook/07.6.md +++ b/eBook/07.6.md @@ -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