Unknwon před 10 roky
rodič
revize
1683c015d6
2 změnil soubory, kde provedl 22 přidání a 20 odebrání
  1. 1 1
      README_gc.md
  2. 21 19
      eBook/07.5.md

+ 1 - 1
README_gc.md

@@ -15,4 +15,4 @@ Golang 编程:245386165
 
 |更新日期    |更新内容
 |----------|------------------
-|2015-07-30|7.4 切片重组(reslice)
+|2015-07-31|7.5 切片的复制与追加

+ 21 - 19
eBook/07.5.md

@@ -1,28 +1,30 @@
 # 7.5 切片的复制与追加
 
-如果想增加 slice 的容量,我们必须创建一个新的更大的 slice 并把原分片的内容都拷贝过来。下面的代码描述了从拷贝 slice 的 copy 方法和向 slice 追加新元素的 append 方法
+如果想增加切片的容量,我们必须创建一个新的更大的切片并把原分片的内容都拷贝过来。下面的代码描述了从拷贝切片的 copy 函数和向切片追加新元素的 append 函数
 
 示例 7.12 [copy_append_slice.go](examples/chapter_7/copy_append_slice.go)
 
-    package main
-    import "fmt"
+```go
+package main
+import "fmt"
 
-    func main() {
-    	sl_from := []int{1, 2, 3}
-    	sl_to := make([]int, 10)
+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
+	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)
-    }
+	sl3 := []int{1, 2, 3}
+	sl3 = append(sl3, 4, 5, 6)
+	fmt.Println(sl3)
+}
+```
 
-`func append(s[]T, x ...T) []T` 其中 append 方法将 0 个或多个具有相同类型 s 的元素追加到 slice 后面并且返回新的 slice;追加的元素必须和原 slice 的元素同类型。如果 s 的容量不足以存储新增元素,append 会分配新的 slice 来保证已有 slice 元素和新增元素的存储。因此,返回的 slice 可能已经指向一个不同的相关数组了。append 方法总是返回成功,除非系统内存耗尽了。
+`func append(s[]T, x ...T) []T` 其中 append 方法将 0 个或多个具有相同类型 s 的元素追加到切片后面并且返回新的切片;追加的元素必须和原切片的元素同类型。如果 s 的容量不足以存储新增元素,append 会分配新的切片来保证已有切片元素和新增元素的存储。因此,返回的切片可能已经指向一个不同的相关数组了。append 方法总是返回成功,除非系统内存耗尽了。
 
-如果你想将 slice y 追加到 slice x 后面,只要将第二个参数扩展成一个列表即可:`x = append(x, y...)`
+如果你想将切片 y 追加到切片 x 后面,只要将第二个参数扩展成一个列表即可:`x = append(x, y...)`
 
 **注意**: append 在大多数情况下很好用,但是如果你想完全掌控整个追加过程,你可以实现一个这样的 AppendByte 方法:
 
@@ -42,7 +44,7 @@ func AppendByte(slice []byte, data ...byte) []byte {
 }
 ```
 
-`func copy(dst, src []T) int` copy 方法将类型为 T 的 slice 从源地址 src 拷贝到目标地址 dst,覆盖 dst 的相关元素,并且返回拷贝的元素个数。源地址和目标地址可能会有重叠。拷贝个数是 src 和 dst 的长度最小值。如果 src 是字符串那么元素类型就是 byte。如果你还想继续使用 src,在拷贝技术后执行 src =dst。
+`func copy(dst, src []T) int` copy 方法将类型为 T 的切片从源地址 src 拷贝到目标地址 dst,覆盖 dst 的相关元素,并且返回拷贝的元素个数。源地址和目标地址可能会有重叠。拷贝个数是 src 和 dst 的长度最小值。如果 src 是字符串那么元素类型就是 byte。如果你还想继续使用 src,在拷贝技术后执行 `src = dst`
 
 **练习 7.9**
 
@@ -50,15 +52,15 @@ func AppendByte(slice []byte, data ...byte) []byte {
 
 **练习 7.10**
 
-用顺序函数过滤容器:s 是前 10 个整形的 slice。构造一个函数 Filter,第一个参数是 s,第二个参数是一个 `fn func(int) bool`,返回满足函数 fn 的元素 slice。通过 fn 测试方法测试当整型值是偶数时的情况。
+用顺序函数过滤容器:s 是前 10 个整形的切片。构造一个函数 Filter,第一个参数是 s,第二个参数是一个 `fn func(int) bool`,返回满足函数 fn 的元素切片。通过 fn 测试方法测试当整型值是偶数时的情况。
 
 **练习 7.11**
 
-写一个函数 InsertStringSlice 将 slice 插入到另一个 slice 的指定位置。
+写一个函数 InsertStringSlice 将切片插入到另一个切片的指定位置。
 
 **练习 7.12**
 
-写一个函数 RemoveStringSlice 将从 start 到 end 索引的元素从 slice 中移除。
+写一个函数 RemoveStringSlice 将从 start 到 end 索引的元素从切片 中移除。
 
 ## 链接