Go语言数组的使用
Go 语言数组
Go 语言提供了数组类型的数据结构。
数组是具有相同唯一类型的一组已编号且长度固定的数据项序列,这种类型可以是任意的原始类型例如整形、字符串或者自定义类型。
相对于去声明number0, number1, ..., and number99的变量,使用数组形式numbers[0], numbers[1] ..., numbers[99]更加方便且易于扩展。
数组元素可以通过索引(位置)来读取(或者修改),索引从0开始,第一个元素索引为 0,第二个索引为 1,以此类推。
声明数组
Go 语言数组声明需要指定元素类型及元素个数,语法格式如下
var array_name [SIZE] array_type
以上为一维数组的定义方式。数组长度必须是整数且大于 0。例如以下定义了数组 balance 长度为 10 类型为 float32:
var blance [5] float32 //如果不给初始化的值,默认就用根据数据类型填充数组的元素,float32的默认填充5个大鸭蛋([0 0 0 0 0])
初始化数组
以下演示了数组初始化:
var blance = [5] float32 {1000.0, 2.0, 3.4, 7.0, 50.0} //给了初始化的值以后,数组中的元素为[1000 2 3.4 7 50]
注意:
- 初始化数组中 {} 中的元素个数不能大于 [] 中的数字。
- 如果忽略 [] 中的数字不设置数组大小,Go 语言会根据元素的个数来设置数组的大小:[...]
package main import (
"fmt"
) func main() {
//会自动计算初始化的值得个数
var blance = [...] float32 {1000.0, 2.0, 3.4, 7.0, 50.0}
//len函数是内部函数,会打印初始化数组中的元素个数
fmt.Println(len(blance))
}
修改数组中第一个索引的值(数组的索引从0开始计算)
blance[1] = 101.21 //数组中的第二个元素就会被重新赋值为101.21,新数组的结果为[1000 101.21 3.4 7 50]
访问数组中的值(不能超出数组的个数,不然会报错)
func main() {
//会自动计算初始化的值得个数
var blance = [...] float32 {1000.0, 2.0, 3.4, 7.0, 50.0}
blance[1] = 101.21
//len函数是内部函数,会打印初始化数组中的元素个数
fmt.Println(len(blance))
fmt.Println(blance[4])
/*超过索引的最大取值了,报错了invalid array index 8 (out of bounds for 5-element array)
fmt.Println(blance[8])
*/
}
以下演示了数组完整操作(声明、赋值、访问)的实例:
package main import (
"fmt"
) func main(){
//创建局部数组变量blance
var blance = [...] string {"a", "b", "c", "d","e","f"}
//计算数组的个数
count := len(blance)
//初始化数组n
var n [6] int
for i := 0; i < count; i++{
//通过for循环,给n的索引赋值
n[i] = i + 10
} //访问新创建的n数组里面的值
for index,v := range n{
fmt.Printf("n数组中的第 %d 个索引为: %d \n",index,v)
}
}
以上代码输出的结果为:
n数组中的第 0 个索引为: 10
n数组中的第 1 个索引为: 11
n数组中的第 2 个索引为: 12
n数组中的第 3 个索引为: 13
n数组中的第 4 个索引为: 14
n数组中的第 5 个索引为: 15
Go 语言多维数组
Go 语言支持多维数组,以下为常用的多维数组声明方式:
var array_name [SIZE1][SIZE2]...[SIZEN] array_type
二维数组
二维数组是最简单的多维数组,二维数组本质上是由一维数组组成的。二维数组定义方式如下:
var arrayName [ x ][ y ] array_type
array_type 为 Go 语言的数据类型,arrayName 为数组名,二维数组可认为是一个表格,x 为行,y 为列,下图演示了一个二维数组 a 为三行四列:
二维数组中的元素可通过 a[ i ][ j ] 来访问。
初始化二位数组:
func main(){
//初始化二维数组
var threedim = [2][5] int {
{1,2,3,4,5},
{6,7,8,9,10},
}
fmt.Println(threedim)
}
获取第二维数组中第一个元素中的第四个值
func main(){
//初始化二维数组,索引从0开始,第一个元素索引为0,第一个元素中第三个索引上的值
var threedim = [2][5] int {
{1,2,3,4,5},
{6,7,8,9,10},
}
fmt.Println(threedim[0][3])
}
利用循环输出二维数组的对应索引上的值
package main import (
"fmt"
) func main(){
//初始化二维数组
var threedim = [3][5] int {
{1,2,3,4,5},
{6,7,8,9,10},
{11,12,13,14,15},
}
count := len(threedim)
for i := 0; i< count ; i++{
inner_count := len(threedim[i])
for j := 0; j < inner_count; j++{
fmt.Printf("threedim [%d][%d] = %d\n", i,j,threedim[i][j])
} }
}
以上代码返回的结果为:
threedim [0][0] = 1
threedim [0][1] = 2
threedim [0][2] = 3
threedim [0][3] = 4
threedim [0][4] = 5
threedim [1][0] = 6
threedim [1][1] = 7
threedim [1][2] = 8
threedim [1][3] = 9
threedim [1][4] = 10
threedim [2][0] = 11
threedim [2][1] = 12
threedim [2][2] = 13
threedim [2][3] = 14
threedim [2][4] = 15
Go 语言向函数传递数组
如果你想向函数传递数组参数,你需要在函数定义时,声明形参为数组
栗子~
package main import (
"fmt"
) func getAverage(arr [] int, size int) float32 {
var sum int
var avg float32
//循环获取arr数组的元素
for i := 0; i < size; i++ {
//计算每个元素相加的和
sum += arr[i]
}
//计算平均数
avg = float32(sum/size)
return avg
} func main() {
//初始化数组
var blance = [] int {100,50,42,1,4}
//调用计算平均数的数组
fmt.Println(getAverage(blance,5))
}
以上代码执行的返回结果:
39
不行 不行,宝宝没办法忍了....go的语法太TMD的egg pain....,我要用Python搞一发~~,快来看Python的
#!/usr/bin/env python3
#_*_coding:utf-8_*_ __author__ = 'demon' array = [100,50,42,1,4] def avg(array):
sum = 0
for i in array:
sum += i
avg_number = sum / len(array)
return avg_number print(avg(array))
更简单的写法~
#!/usr/bin/env python3
#_*_coding:utf-8_*_ __author__ = 'demon' array = [100,50,42,1,4] print(sum(array)/len(array))
以上代码执行的结果:
39.4
Go语言数组的使用的更多相关文章
- GO语言数组和切片实例详解
本文实例讲述了GO语言数组和切片的用法.分享给大家供大家参考.具体分析如下: 一.数组 与其他大多数语言类似,Go语言的数组也是一个元素类型相同的定长的序列. (1)数组的创建. 数组有3种创建方式: ...
- C语言 数组 列优先 实现
C语言数组结构列优先顺序存储的实现 (GCC编译). 从行优先转换为列优先存储方式, 与行优先相比, 不同之处在于改变了数组维界基址的先后顺序, 从而改变了映像函数常量基址. /** * @brief ...
- C语言 数组 行优先 实现
C语言数组结构行优先顺序存储的实现 (GCC编译). /** * @brief C语言 数组 行优先 实现 * @author wid * @date 2013-11-02 * * @note 若代码 ...
- 不可或缺 Windows Native (5) - C 语言: 数组
[源码下载] 不可或缺 Windows Native (5) - C 语言: 数组 作者:webabcd 介绍不可或缺 Windows Native 之 C 语言 数组 示例cArray.h #ifn ...
- C语言数组
在C语言中,对于三维或三维以上数组的使用并没有很好的支持,而且使用率也非常的低,后面会对三维数组做一些简单的分析,这篇文章主要以二维数组来探讨一些C语言中数组使用的相关概念和技巧. 1 一个var[i ...
- C语言数组:C语言数组定义、二维数组、动态数组、字符串数组
1.C语言数组的概念 在<更加优美的C语言输出>一节中我们举了一个例子,是输出一个 4×4 的整数矩阵,代码如下: #include <stdio.h> #include &l ...
- Go 语言数组
Go 语言提供了数组类型的数据结构. 数组是具有相同唯一类型的一组已编号且长度固定的数据项序列,这种类型可以是任意的原始类型例如整形.字符串或者自定义类型. 相对于去声明number0, number ...
- C语言 > 数组和指针
C语言 数组和指针 const: 关于指针和const需要注意一些规则.首先,把const数据或非const数据的地址初始化为指向const的指针或为其赋值是合法的. 然而,只能把非const数据的地 ...
- Go语言数组和切片的原理
目录 数组 创建 访问和赋值 切片 结构 初始化 访问 追加 拷贝 总结 数组和切片是 Go 语言中常见的数据结构,很多刚刚使用 Go 的开发者往往会混淆这两个概念,数组作为最常见的集合在编程语言中是 ...
随机推荐
- Unity-Shader-动态阴影(上) 投影的矩阵变换过程
[旧博客转移 - 2017年1月20日 01:20 ] 前面的话 最近很长时间没写博文了,一是太忙 ( lan ) 了,二是这段时间又领悟了一些东西,脑子里很混乱,不知道从何写起.但感觉不能再拖延下去 ...
- ELK日志框架(2):log4net.ElasticSearch+ Kibana实现日志记录和显示
环境说明 1. windows server 2012 R2 64位 2. log4net.ElasticSearch 3. kibana-5.5.0-windows-x86.zip 架构说明 数据采 ...
- Opencv探索之路(十九):读写xml和yml文件
有时候我们处理完图像后需要保存一下数据到文件上,以供下一步的处理.一个比较广泛的需求场景就是:我们对一幅图像进行特征提取之后,需要把特征点信息保存到文件上,以供后面的机器学习分类操作.那么如果遇到这样 ...
- js验证身份证号码
function IdentityCodeValid(code) { var city={11:"北京",12:"天津",13:"河北",1 ...
- Redis源码阅读之主从复制——Slave视角
Redis主从复制 为了提高性能和系统可用,Redis都会做主从复制,一来可以分担主库压力,二来在主库挂掉的时候从库依旧可以提供服务.Redis的主从复制是异步复制,返回结果给客户端和同步命令到从库是 ...
- [bzoj 2243]: [SDOI2011]染色 [树链剖分][线段树]
Description 给定一棵有n个节点的无根树和m个操作,操作有2类: 1.将节点a到节点b路径上所有点都染成颜色c: 2.询问节点a到节点b路径上的颜色段数量(连续相同颜色被认为是同一段),如“ ...
- 浅谈redux-form在项目中的运用
准则 先说一下redux的使用场景,因为如果没有redux,那更不会有redux-form. redux基于Flux架构思想,是一个状态管理框架,其目标是解决单页面应用中复杂的状态管理问题. 日常前端 ...
- 扩展entity framework core 实现默认字符串长度,decimal精度,entity自动注册和配置
报道越短,事情越严重!文章越短,内容越精悍! 文章以efcore 2.0.0-preview2.测试验证通过.其他版本不保证使用,但是思路不会差太远.源代码 目标: 1.实现entity的自动发现和m ...
- 【Django】Python web开发:几个模板系统的性能对比(转)
http://blog.chedushi.com/archives/910 结论: 点评一下吧.django就是个渣,不多废话了.webpy的代码很简洁,可惜速度太慢了.bottle看起来快一点,不过 ...
- 现代C++新四大名著及C++学习杂谈
现代C++新四大名著及C++学习杂谈 翻开自己的博客,在2012年8月我曾经写过如下一篇博客, <<C++学习的方法以及四大名著>> http://www.cnblogs.co ...