Go语言学习八:切片(slice)和范围(range)

shawncheer · · 11841 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

// Go 语言切片是对数组的抽象。切片的单词来源于可以对其他数组和切片进行片段截取 // Go 数组的长度不可改变,在特定场景中这样的集合就不太适用, // Go中提供了一种灵活,功能强悍的内置类型切片("动态数组"), // 与数组相比切片的长度是不固定的,可以追加元素, // 在追加时可能使切片的容量增大。 package main import "fmt" func main() {	// 切片的长度和容量	var numbers = make([]int, 3, 5) //用make创建切片	printSlice(numbers)	// 空(nil)切片	// 切片在未初始化时默认是nil,长度是0,容量也是0	var numbers1 []int	printSlice(numbers1)	if numbers1 == nil {	fmt.Printf("切片是空的")	}	//切片截取	numbers2 := []int{0, 1, 2, 3, 4, 5, 6, 7, 8}	/* 打印子切片从索引1(包含) 到索引4(不包含)*/	fmt.Println("numbers2[1:4] ==", numbers2[1:4])	fmt.Println("numbers2[:3] ==", numbers2[:3]) //索引是从0开始的	fmt.Println("numbers2[4:] ==", numbers2[4:])	numbers3 := make([]int, 0, 5)	printSlice(numbers3)	numbers4 := numbers2[:2] //索引 0(包含) 到索引 2(不包含),这是为了计算数量更方便	printSlice(numbers4)	// append() 和 copy() 函数	var numbers5 []int	printSlice(numbers5)	numbers5 = append(numbers5, 0) //容量是2的n次方	printSlice(numbers5)	numbers5 = append(numbers5, 1)	printSlice(numbers5)	numbers5 = append(numbers5, 2, 3, 4)	printSlice(numbers5)	// 创建两倍容量的切片	numbers6 := make([]int, len(numbers5), (cap(numbers5))*2)	copy(numbers6, numbers5) //前面是目标,后面是要复制的内容,把原来的覆盖、	printSlice(numbers6)	// Go 语言中 range 关键字用于for循环中迭代数组(array)、切片(slice)、	// 链表(channel)或集合(map)的元素。在数组和切片中它返回元素的索引值,	// 在集合中返回 key-value 对的 key 值。	//range是取出两值	nums := []int{2, 3, 4}	sum := 0	for _, num := range nums {	sum += num	}	fmt.Println("sum:", sum)	//在数组上使用range将传入index和值两个变量。	// 上面那个例子我们不需要使用该元素的序号,所以我们使用空白符"_"省略了。	// 有时侯我们确实需要知道它的索引。	for i1, num1 := range nums {	if num1 == 3 {	fmt.Println("index:", i1) //索引从0开始	}	}	//range也可以用在map的键值对上。	kvs := map[string]string{"a": "apple", "b": "banana"}	for k, v := range kvs {	fmt.Printf("%s -> %s\n", k, v)	}	//range也可以用来枚举Unicode字符串。第一个参数是字符的索引,第二个是字符(Unicode的值)本身。	for i2, c := range "go" {	fmt.Println(i2, c)//得出的c是ASCII值	} } func printSlice(x []int) {	//这里的len()是用来获得现在切片数据的长度,而cap()则为了求总容量	fmt.Printf("len=%d cap=%d slice=%v\n", len(x), cap(x), x) }


有疑问加站长微信联系(非本文作者)

本文来自:CSDN博客

感谢作者:shawncheer

查看原文:Go语言学习八:切片(slice)和范围(range)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

11841 次点击  
加入收藏 微博
1 回复  |  直到 2017-10-10 14:12:19
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传