文档章节

GO 数组相关操作

汤汤圆圆
 汤汤圆圆
发布于 09/18 22:49
字数 862
阅读 12
收藏 0
Go
package main

import(
	"fmt"
	"math/rand"
	"time"
)

func main() {
	//数组的几种定义方式
	var arr1 [3]int = [3]int{1,2,3}
	var arr2 = [3]int{4,5,6}
	arr3 := [3]string{"h", "w", "z"}
	var arr4 = [...]int{1,2,3} //[...]固定写法
	var arr5 = [...]string{1:"zhangsan", 0:"lisi", 2:"wangwu"} //可以指定数组下标

	fmt.Printf("arr1 = %v, type %T\n", arr1, arr1)
	fmt.Printf("arr2 = %v, arr2[0]的地址%p\n", arr2, &arr2[0])
	fmt.Printf("arr3 = %v, arr3 %p, arr3[2]的地址%p\n", arr3, &arr3, &arr3[2])
	//for遍历数组
	for i := 0; i < len(arr4); i++ {
		fmt.Printf("arr 第%v个元素的值%v\n", i, arr4[i])
	}
	fmt.Println(arr5)

	//for range 遍历
	//for _,v := range arr 这样只关心 v值; 不关心i下标
	for i,v := range arr5 {
		fmt.Printf("i = %v, v = %v\n", i, v)
	}

	//细节
	var testArr [3]int //一旦定义了数组类型以及长度;以后就是不能动态改变
	testArr[0] = 1
	testArr[1] = 2
	//testArr[3] = 2.1 //此时要报错 类型不正确
	//testArr[4] = 4 //越界也不行
	fmt.Println(testArr)

	//默认值 数字(整型,浮点)是0,string 是空字符串,bool 是false
	var testIntArr [3]float32
	var testStrArr [3]string
	var testBoolArr [3]bool
	//intarr = [0 0 0], strArr = [  ], boolArr = [false false false]
	fmt.Printf("intarr = %v, strArr = %v, boolArr = %v\n", testIntArr, testStrArr, testBoolArr)

	//数组是值传递
	tv := [3]int{1,2,3}
	testValArr(tv)
	//1,2,3 没有改变
	fmt.Println(tv)
	//可以通过指针来引用传递
	testPointArr(&tv)
	//此时就改变了tv的值了 11,2,3
	fmt.Println(tv)

	//数组长度也是数组类型的一部分,如果长度不等相当于不一样的类型
	//tv2 := [2]int{1,2}
	//testValArr(tv2) //此时是要报错的因为函数接收3个长度的
	//tv3 := [...]int{1,2,3,4} //这个也是通过不了
	//testValArr(tv3)
	//tv4 := [...]int{1,3,4} //这个是通过的
	//testValArr(tv4)

	//输出A-Z
	var myByte [26]byte
	for i := 0; i < 26; i++ {
		myByte[i] = 'A' + byte(i)//需要把i转成byte类型
	}
	for i := 0; i < 26; i++ {
		fmt.Printf("%c ", myByte[i])
	}

	//求数组最大值
	var maxArr [7]int = [7]int{1,3,60,-2,80,50,2}
	//假设数组第一个值为最大值,然后循环去比较
	maxIndex := 0
	maxVal := maxArr[0]
	for i,v := range maxArr {
		if maxVal < v {
			maxVal = v
			maxIndex = i
		}
	}
	fmt.Printf("\nmaxVal = %v, maxIndex = %v\n", maxVal, maxIndex)

	//求数组的平均值
	avgArr := [7]int{1,2,3,20,55,11,22}
	sum := 0
	for _,val := range avgArr {
		sum += val
	}
	fmt.Printf("avgArr的平均值为= %0.2f\n", float64(sum) / float64(len(avgArr)))

	//随机5个数,以及反转数组
	var reverArr [5]int
	//需要一个随机种子;要不每次随机值都一样
	rand.Seed(time.Now().UnixNano()) //使用纳秒
	reverArrLen := len(reverArr);
	for i := 0; i < reverArrLen; i++ {
		reverArr[i] = rand.Intn(100) // 0<=n<100
	}
	fmt.Println(reverArr);
	//反转思路, 第一个和最后一个交换, 第二个和倒数第二个交换,就可以确认需要交换 len(arr)/2次;值可以通过中间变量来解决
	tmp := 0 //中间临时变量
	for i := 0; i < reverArrLen / 2; i++ {
		tmp = reverArr[reverArrLen - 1 - i] //存放后面的一个值
		reverArr[reverArrLen - 1 - i] = reverArr[i] //把后面一个值赋值为前面的值
		reverArr[i] = tmp //前面的值赋值为后面的值
	}
	fmt.Println(reverArr);
}

func testPointArr(arr *[3]int) {
	(*arr)[0] = 11 //(*arr)取指针的值
}
func testValArr(arr [3]int) {
	arr[0] = 11
}

二维数组

package main

import(
	"fmt"
)

func main() {
	var arr [3][5]float64 //定义一个二维数组

	for i := 0; i < len(arr); i++ {
		for j := 0; j < len(arr[i]); j++ {
			fmt.Printf("请输入第%v个班级第%v学生的成绩\n", i+1, j+1)
			fmt.Scanln(&arr[i][j]);
		} 
	}

	//遍历二维数组
	for i,v := range arr {
		var sum float64 = 0
		for _,val := range v {
			sum += val
		}
		fmt.Printf("第%v个班级的平均成绩%v\n", i+1, sum / float64(len(arr[i])))
	}
}

© 著作权归作者所有

共有 人打赏支持
汤汤圆圆

汤汤圆圆

粉丝 11
博文 77
码字总数 24622
作品 0
昌平
程序员
私信 提问
nginx源码分析—数组结构ngx_array_t

本博客(http://blog.csdn.net/livelylittlefish )贴出作者(阿波)相关研究、学习内容所做的笔记,欢迎广大朋友指正! Content 0.序 1.数组结构 1.1ngx_array_t结构 1.2ngx_array_t的逻辑结...

晨曦之光
2012/03/09
191
0
Nginx 源码分析:从模块到配置(上)

源文件路径 主要内容 本篇的主要目的在于分析的配置功能。由于的配置基本就是对模块的配置,因此,在讨论配置功能之前,需要先分析的模块功能。 对于模块功能,这里的重点不在于某个模块的细...

_Zhao
08/27
0
0
前端入门11-JavaScript语法之数组

声明 本系列文章内容全部梳理自以下几个来源: 《JavaScript权威指南》 MDN web docs Github:smyhvae/web Github:goddyZhao/Translation/JavaScript 作为一个前端小白,入门跟着这几个来源学...

请叫我大苏
12/03
0
0
Manipulating a Navigation Controller’s Array of Vi

问题: 你想要直接控制导航控制器中的的特性 解决方法: 使用UINavigationController类中的ViewControllers属性来访问和修改与导航控制器相关的视图控制器 - (void) goBack { /得到控制器的当...

人生天地间
2014/02/17
0
0
Fresco源码分析之Hierarchy

上篇文章我们分析了Fresco中的DraweeView,对其中的一些原理以及方法进行了解析。在这过程中我们了解到,DraweeView中是通过DraweeHolder来统一管理的。而DraweeHolder又是用来统一管理相关的...

VanRouse
2017/12/13
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Nginx-使用简单总结

下载nginx:http://nginx.org/en/download.html 下载后解压 有很多种方法启动nginx (1)直接双击nginx.exe, 双击后一个黑色的弹窗一闪而过 (2)打开cmd命令窗口,切换到nginx解压目录下, 输入...

Java搬砖工程师
18分钟前
3
0
通过修改控制文件scn推进数据库scn

在数据库遇到ora-600[2662],scn不一致(又没有日志)的时候,我们首先想到的就是去推进数据库的scn,让数据库能够open起来,抢救其中的数据,但是由于各种乱用的情况,oraclescn的pach出来后(11.2...

突突突酱
19分钟前
1
0
Underscore _.template 方法使用详解

https://github.com/hanzichi/underscore-analysis/issues/26 前文 浅谈 Web 中前后端模板引擎的使用 我们简单了解了模板引擎在前后端的应用场景,本文重点深入 Underscore 的模板函数 _.te...

壹峰
20分钟前
1
0
前端缩短数字的长度解决方案[10进制转化为64进制]

function string10to64 (number) { var chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_$'.split(''), radix = chars.length, qutient =......

未来cc
20分钟前
1
0
十年架构师不到400行手写一个Spring MVC

首先,我们先来介绍一下Spring的三个阶段,配置阶段、初始化阶段和运行阶段(如图): 配置阶段:主要是完成application.xml配置和Annotation配置。 初始化阶段:主要是加载并解析配置信息,...

小刀爱编程
21分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部