From a8d6519df045522e61e5f8cdaa7be017d84f94ff Mon Sep 17 00:00:00 2001 From: Unknown Date: Sat, 15 Nov 2014 15:55:43 -0500 Subject: [PATCH] 7.5 --- README.md | 2 +- eBook/07.5.md | 27 +++++++++++++-------------- eBook/07.6.md | 3 +++ eBook/directory.md | 1 + 4 files changed, 18 insertions(+), 15 deletions(-) create mode 100644 eBook/07.6.md diff --git a/README.md b/README.md index c51d491..0c3d3fc 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ ## 翻译进度 -7.4 [切片重组](eBook/07.4.md) +7.5 [切片的复制与追加](eBook/07.5.md) ## 支持本书 diff --git a/eBook/07.5.md b/eBook/07.5.md index 2b0db97..c295433 100644 --- a/eBook/07.5.md +++ b/eBook/07.5.md @@ -1,8 +1,6 @@ # 7.5 切片的复制与追加 -176 - -如果想增加slice的容量,我们必须创建一个新的更大的slice并把原分片的内容都拷贝过来。下面的代码描述了从拷贝slice的copy方法和向slice追加新元素的append方法。 +如果想增加 slice 的容量,我们必须创建一个新的更大的 slice 并把原分片的内容都拷贝过来。下面的代码描述了从拷贝 slice 的 copy 方法和向 slice 追加新元素的 append 方法。 示例 7.12 [copy_append_slice.go](exmaples/chapter_7/copy_append_slice.go) @@ -22,11 +20,11 @@ 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 的元素追加到 slice 后面并且返回新的 slice;追加的元素必须和原 slice 的元素同类型。如果 s 的容量不足以存储新增元素,append 会分配新的 slice 来保证已有 slice 元素和新增元素的存储。因此,返回的 slice 可能已经指向一个不同的相关数组了。append 方法总是返回成功,除非系统内存耗尽了。 -如果你想将slice y追加到slice x后面,只要将第二个参数扩展成一个列表即可: x = append(x, y...) +如果你想将 slice y 追加到 slice x 后面,只要将第二个参数扩展成一个列表即可:`x = append(x, y...)` -**注意**: append在大多数情况下很好用,但是如果你想完全掌控整个追加过程,你可以实现一个这样的AppendByte方法: +**注意**: append 在大多数情况下很好用,但是如果你想完全掌控整个追加过程,你可以实现一个这样的 AppendByte 方法: func AppendByte(slice []byte, data ...byte[]) []byte { m := len(slice) @@ -42,17 +40,18 @@ func append(s[]T, x ...T) []T 其中append方法将0个或多个具有相同类 return slice } -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 的 slice 从源地址 src 拷贝到目标地址 dst,覆盖 dst 的相关元素,并且返回拷贝的元素个数。源地址和目标地址可能会有重叠。拷贝个数是 src 和 dst 的长度最小值。如果 src 是字符串那么元素类型就是 byte。如果你还想继续使用 src,在拷贝技术后执行 src =dst。 -练习 7.9: magnify_slice.go: 给定slice s[]int和一个int类型的因子,扩展s使其长度为len(s) * factor。 +练习 7.9: magnify_slice.go: 给定 `slice s[]int` 和一个 int 类型的因子,扩展 s 使其长度为 `len(s) * factor`。 -练习 7.10:filter_slice.go: 用顺序函数过滤容器:s是前10个整形的slice。构造一个函数Filter,第一个参数是s,第二个参数是一个fn func(int) bool,返回满足函数fn的元素slice。通过fn测试方法测试当整型值是偶数时的情况。 +练习 7.10:filter_slice.go: 用顺序函数过滤容器:s 是前 10 个整形的 slice。构造一个函数 Filter,第一个参数是 s,第二个参数是一个 `fn func(int) bool`,返回满足函数 fn 的元素 slice。通过 fn 测试方法测试当整型值是偶数时的情况。 -练习 7.11:insert_slice.go:写一个函数InsertStringSlice将slice插入到另一个slice的指定位置。 +练习 7.11:insert_slice.go:写一个函数 InsertStringSlice 将 slice 插入到另一个 slice 的指定位置。 -练习 7.12:remove_slice.go:写一个函数RemoveStringSlice将从start到end索引的元素从slice中移除。 +练习 7.12:remove_slice.go:写一个函数 RemoveStringSlice 将从 start 到 end 索引的元素从 slice 中移除。 + +## 链接 -##链接 - [目录](directory.md) -- 上一节:[分片重组](07.4.md) -- 下一节:[字符串,数组和slice应用](07.6.md) \ No newline at end of file +- 上一节:[切片重组](07.4.md) +- 下一节:[字符串、数组和切片的应用](07.6.md) \ No newline at end of file diff --git a/eBook/07.6.md b/eBook/07.6.md new file mode 100644 index 0000000..e67e44d --- /dev/null +++ b/eBook/07.6.md @@ -0,0 +1,3 @@ +# 7.6 字符串、数组和切片的应用 + +178 \ No newline at end of file diff --git a/eBook/directory.md b/eBook/directory.md index 2b915a1..f0d85e5 100644 --- a/eBook/directory.md +++ b/eBook/directory.md @@ -64,6 +64,7 @@ - 7.3 [For-range 结构](07.3.md) - 7.4 [切片重组](07.4.md) - 7.5 [切片的复制与追加](07.5.md) + - 7.6 [字符串、数组和切片的应用](07.6.md) - 第8章:Maps - 第9章:包(package) - 第10章:结构(struct)与方法(method)