[x/blog] go.blog/slices: fix bug in Append
The code didn't work but the blog runs the previous simple version, which does, so when you hit Run it looks like it's working. It only had two bugs (so far). Thanks to shelah.kell@gmail.com for noticing. R=adg CC=golang-dev https://golang.org/cl/14036043 X-Blog-Commit: d4c23261dc940eb2cb841a1a84832174e6bac0c4
This commit is contained in:
Родитель
35f822c532
Коммит
17bd7046c4
|
@ -443,7 +443,7 @@ allocated memory, and then to copy the appending items to the end of the old dat
|
||||||
|
|
||||||
Try it; the behavior is the same as before:
|
Try it; the behavior is the same as before:
|
||||||
|
|
||||||
.play -edit slices/prog130.go /START/,/END/
|
.play -edit slices/prog140.go /START/,/END/
|
||||||
|
|
||||||
* Append: The built-in function
|
* Append: The built-in function
|
||||||
|
|
||||||
|
|
|
@ -11,7 +11,8 @@ import (
|
||||||
// Append appends the elements to the slice.
|
// Append appends the elements to the slice.
|
||||||
// Efficient version.
|
// Efficient version.
|
||||||
func Append(slice []int, elements ...int) []int {
|
func Append(slice []int, elements ...int) []int {
|
||||||
total := len(slice) + len(items)
|
n := len(slice)
|
||||||
|
total := len(slice) + len(elements)
|
||||||
if total > cap(slice) {
|
if total > cap(slice) {
|
||||||
// Reallocate. Grow to 1.5 times the new size, so we can still grow.
|
// Reallocate. Grow to 1.5 times the new size, so we can still grow.
|
||||||
newSize := total*3/2 + 1
|
newSize := total*3/2 + 1
|
||||||
|
@ -19,9 +20,8 @@ func Append(slice []int, elements ...int) []int {
|
||||||
copy(newSlice, slice)
|
copy(newSlice, slice)
|
||||||
slice = newSlice
|
slice = newSlice
|
||||||
}
|
}
|
||||||
n := len(slice)
|
|
||||||
slice = slice[:total]
|
slice = slice[:total]
|
||||||
copy(slice[:n], elements)
|
copy(slice[n:], elements)
|
||||||
return slice
|
return slice
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче