内容简介:翻译来于:在下面的使用会出现错误:扩展版本的extend
Go中的Array和Slice
翻译来于: https://blog.golang.org/slices
操作
extend
func Extend(slice []int, element int) []int { n := len(slice) slice = slice[0 : n+1] slice[n] = element return slice }
在下面的使用会出现错误:
func main() { var iBuffer [10]int slice := iBuffer[0:0] for i := 0; i < 20; i++ { slice = Extend(slice, i) fmt.Println(slice) } } 底层的buffer最大长度为10,所有在extend到10的时候会出现out of range
扩展版本的extend
func Extend(slice []int, element int) []int { n := len(slice) if n == cap(slice) { // Slice is full; must grow. // We double its size and add 1, so if the size is zero we still grow. newSlice := make([]int, len(slice), 2*len(slice)+1) copy(newSlice, slice) slice = newSlice } slice = slice[0 : n+1] slice[n] = element return slice }
首先要保证len和cap的带下关系。当len不等于cap的时候extends slice
的大小。
copy
copy(newSlice, slice) copy(slice[index+1:], slice[index:])
一定要保证容量的问题
array to slice
var array = [n]int slice = array[:] slice = array[begin:end]
slice to array
在调用append方法的时候需要传入的是个数不定的element func Append(slice []int, elements ...int) []int{ } slice1 := []int{0, 1, 2, 3, 4} slice2 := []int{55, 66, 77} slice1 = Append(slice1, slice2...) // The '...' is essential!
nil slice 和 empty slice
参考: https://blog.golang.org/go-slices-usage-and-internals
var slice []int 这里的slice==nil 但是 slice = make([]int,0,0) slice不等于nil
cap len 操作
nil slice的cap和len的大小都为0 并且可以使用append操作
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
CLR via C#
(美)Jeffrey Richter / 周靖 / 清华大学出版社 / 2010-9 / 99.00元
本书针对CLR和.NET Framework 4.0进行深入、全面的探讨,并结合实例介绍了如何利用它们进行设计、开发和调试。全书5部分29章。第Ⅰ部分介绍CLR基础,第Ⅱ部分解释如何设计类型,第Ⅲ部分介绍基本类型,第Ⅳ部分以实用特性为主题,第Ⅴ部分花大量篇幅重点介绍线程处理。 通过本书的阅读,读者可以掌握CLR和.NET Framework的精髓,轻松、高效地创建高性能应用程序。一起来看看 《CLR via C#》 这本书的介绍吧!