Go语言中数组的使用

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

## 1 概述 数组,切片,map是容器数据类型。都是可以存储多个值的符合类型。 其中数组是相同类型的一组已编号且长度固定的数据项序列,不用类型和长度是不同的数据类型,例如[5]int, [3]int, [5]byte是不同的类型。 ![数组](http://www.hellokang.net/images/posts/go/go-array.png) ## 2 定义语法 ``` // 定义长度和类型,默认使用类型零值进行初始化 var a1 [10]int // 定义长度和类型,同时初始化部分(全部)元素 // 元素不够从前到后进行初始化 var a2 = [10]int{1, 2, 3, 4, 5} // 不指定长度,指定类型。使用初始值确定长度 // 有几个初始值,长度就是几 var a3 = [...]int{1, 2, 3, 4, 5, 6} // 通过索引确定元素值 var a4 = [10]int{0: 1, 3: 2, 5: 3, 4, 5} ``` ## 3 []索引访问 索引(index),是从 0 开始,加 1 递增的。使用 [] 访问。 ``` arr[0] // 数组的第一个元素 arr[len(arr)-1] // 数组的最后一个元素 ``` ## 4 数组是值类型 数组为值类型,赋值时会生成新拷贝。这个可能和你熟悉的语言不同,稍稍留意。 ## 5 len() 长度 统计元素个数,一维的统计。如果是多维,仅统计一维元素数量。 ## 6 数组遍历 使用 循环索引 或者 for range 的语法完成遍历。 ``` // 循环索引 var arr = [...]string{"a", "b", "c", "d", "e", "f"} for i, l := 0, len(arr); i < l; i++ { fmt.Println(arr[i]) } // for range var arr = [...]string{"a", "b", "c", "d", "e", "f", "g", "h"} for i, v := range arr { fmt.Println(i, v) } ``` ## 7 多维数组 数组元素的值可以是数组类型,称之为多维数组,要求内部数组的长度相同。以二维数组为例,使用[][]来定义,可以将二维数组想象成一个行列表格。 ``` var a1 [3][5]int var a2 = [3][5]string{{"a", "b", "c", "d", "e"}, {"f", "g", "h", "i", "j"}, {"k", "l", "m", "n", "o"}} ``` 以上代码就定了二维数组,第一个使用默认值初始,第二个手动填充。 演示如下 ![二维数组](http://www.hellokang.net/images/posts/go/go-array-2.png) 使用双层循环可以遍历二维数组: ``` // 循环索引 // 行坐标索引 for i := 0; i < 3; i++ { // 列坐标索引 for j := 0; j < 5; j++ { fmt.Print(a2[i][j], " ") } fmt.Println() } // for range for _, row := range a2 { // fmt.Println(i, row) for _, value := range row { fmt.Print(value, " ") } fmt.Println() } ``` ## 8 数组传参 数组是值类型,传参时会发生值拷贝,当使用大数组时,内存的消耗需要考虑。可以考虑使用数组指针或者切片类型。 ``` func FuncName(p *[9999]float64) { } ``` ## 9 ==,!= 数组间的比较 两个数组的类型,长度,元素值,顺序都相同,认为两个数组相等。 ``` [3]{1, 2, 3} == [4]{1, 2, 3, 4} // false [3]{1, 2, 3} == [3]{3, 2, 1} // false [3]{1, 2, 3} == [3]{1, 2, 3} // true ``` 完! 原文出自:[小韩说课](http://www.hellokang.net/go/go-array/) 微信关注:小韩说课 ![小韩说课](http://www.hellokang.net/images/wechat_subscription.jpg)

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

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

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