【原创】go语言学习(七)数组
目录
- 数组定义
- 二维数组
- 数组拷贝、传参
数组定义
1. 数组是同一类型的元素集合。
var a [3]int
//定义一个数组 //Go中数组下标从0开始,因此⻓长度为n的数组下标范围:[0,n-1] //整数组中的元素默认初始化为0,字符串串数组中的元素默认初始化为””
2. 数组初始化
var a [3]int
a[0] = 10
a[1] = 20
a[2] = 30
//数组初始化 var a [3]int = [3]int{10, 20, 30}
//定义时数组初始化 a := [3]int{10, 20, 30}
//定义时数组初始化 a := […]int{10, 20, 30}
//定义时数组初始化 a := [3]int{10}
//定义时数组初始化 a := [3]int{2:10}
//定义时数组初始化
3. 数组⻓长度是类型的一部分
var a [3]int
a[0] = 10
a[1] = 20
a[2] = 30
var b [5]int
b = a
//a、b是不同类型的数组,不能赋值
4、len内置函数
var a [3]int
a[0] = 10
a[1] = 20
a[2] = 30
fmt.Printf(“len:%d\n”, len(a))
//a、b是不同类型的数组,不能赋值
5. 数组遍历
var a [3]int
a[0] = 10
a[1] = 20
a[2] = 30
for i := 0; i < len(a); i++ {
}
//a、b是不同类型的数组,不能赋值
var a [3]int
a[0] = 10
a[1] = 20
a[2] = 30
for index, val := range a {
}
//a、b是不不同类型的数组,不不能赋值
二维数组
1、 二维数组
var a [3][2]int
a[0][0] = 10
a[0][1] = 20
a[1][0] = 30
a[1][1] = 30
a[2][0] = 30
a[2][1] = 30
for index, val := range a {
}
//a、b是不不同类型的数组,不不能赋值
2、二维数组(二)
// 数组遍历写法二
func testArra10() {
// 数组 a [长度]类型
// 定义完成, 值为[0,0,0,100,300],指定特定下标
a := [5]int{3: 100, 4: 300}
for index, value := range a {
fmt.Printf("a[%d]=%d\n", index, value)
}
}
3、二维数组(三)
// 二维数组定义
func testArra11() {
var a [3][2]int
a[0][0] = 10
a[0][1] = 20
a[1][0] = 30
a[1][1] = 40
a[2][0] = 50
a[2][1] = 60 fmt.Println(a) // 遍历二维数组
for i := 0; i < 3; i++ {
for j := 0; j < 2; j++ {
fmt.Printf("%d", a[i][j])
}
fmt.Println()
} //遍历方式二
fmt.Println("other method")
for i, val := range a {
// %v自动匹配格式输出,行
fmt.Printf("row[%d]=%v\n", i, val)
for j, val2 := range val {
fmt.Printf("(%d,%d)=%d", i, j, val2)
}
} }
数组拷贝、传参
1、数组是值类型
var a [3]int
a[0] = 10
a[1] = 20
a[2] = 30
b := a
//b拷贝了了数组a中所有元素
b[0] = 1000
fmt.Println(a, b)
2、 数组是值类型,函数传参也会拷贝
// 值类型,copy为全拷贝,改变b不会影响a
func testArra12() {
a := [3]int{10, 20, 30}
b := a
b[0] = 1000
fmt.Printf("a=%v\n", a)
fmt.Printf("b=%v\n", b)
} // int类型都是值类型,copy为全拷贝,改变b不会影响a
func testArray13() {
var a int = 1000
b := a
b = 3000
fmt.Printf("a=%d b=%d\n", a, b)
} // 数组传参为copy
func modify(b [3]int) {
b[0] = 1000
}
例子:
package main import (
"fmt"
"math/rand"
"time"
) func sumArray(a [10]int) int {
var sum int = 0
//第一种遍历
for i := 0; i < len(a); i++ {
sum = sum + a[i]
} //第二种遍历, _ 屏蔽下标
//for _, val := range a{
// sum = sum + val
//} return sum
} // 随机10数相加
func testArraySum() { //初始化随机种子,time.Now().Unix()纳秒时间
rand.Seed(time.Now().Unix()) var b [10]int
for i := 0; i < len(b); i++ {
//b[i] = i
//随机 rand
// 产生一个0到999的随机数
b[i] = rand.Intn(1000)
// 产生一个0到Int最大值的随机数
// b[i] = rand.Int()
} sum := sumArray(b)
fmt.Printf("sum=%d\n", sum)
} // 两个元素之和,等于8 target的下标
func TwoSum(a [5]int, target int) {
for i := 0; i < len(a); i++ {
other := target - a[i]
for j := i + 1; j < len(a); j++ {
if a[j] == other {
fmt.Printf("(%d, %d)\n", i, j)
}
}
}
} //
func testTwoSum() {
// var b [5]int = [5]int{1,3,5,8,7}
// b := [5]int{1,3,5,8,7}
b := [...]int{1, 3, 5, 8, 7}
TwoSum(b, 8)
} func main() {
//sumArray()
//testArraySum()
testTwoSum()
}
【原创】go语言学习(七)数组的更多相关文章
- C语言学习004:数组与指针
在C语言中,字符串实际上就是字符数组,在内存中字符串"Shatner"存储的形式是这样的
- C语言学习笔记--数组指针和指针数组
C 语言中的数组有自己特定的类型,数组的类型由元素类型和数组大小共同决定.(如 int array[5]类型为 int[5]) 1.定义数组类型 C 语言中通过 typedef 为数组类型重命名:ty ...
- go语言学习--指针数组和数组指针
数组指针(也称行指针)定义 int (*p)[n];()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也可以说是p的步长.也就是说执行p+1时,p要跨过n个整型数据的 ...
- go语言学习(一):数组/切片
学习区块链之后,发现还要学习加密,接触到的视频是:Go的crypto包,所以开始接触Go.因为和solidity有些相似,但是比solidity简单一些,就开始放松的心态去学习.每天翻着go菜鸟教程, ...
- C语言学习笔记--数组参数和指针参数
1. 数组参数退化为指针的意义 (1)C 语言中只会以值拷贝的方式传递参数,当向函数传递数组时,将整个数组拷贝一份传入函数导致执行效率低下,C 语言以高效作是最初的设计目标,所以这种方法是不可取的. ...
- c语言学习笔记 —— 数组
1. 数组的内存分配原理. 数组定义 int a[3] = {1,3,11}; 如下写法是错误的: int number; int a[number] = {1,7,9}; 原因是:没有定长的数组初 ...
- c语言学习笔记.数组.
数组: 可以存储一个固定大小的相同类型元素的顺序集合,比如int类型的数组.float类型的数组,里面存放的数据称为“元素”. 所有的数组都是由连续的内存位置组成.最低的地址对应第一个元素,最高的地址 ...
- GO 语言学习笔记--数组切片篇
1.对于make 数组切片,长度和容量需要理解清楚: 容量表示底层数组的大小,长度是你可以使用的大小: 容量的用处在哪?在与当你用 appen d扩展长度时,如果新的长度小于容量,不会更换底层数组,否 ...
- Dart语言学习(七)Dart Map类型
映射(Maps)是无序的键值对: 常用属性: keys 获取所有的key值 values 获取所有的value值 isEmpty 是否为空 isNotEmpty 是否不为空 常用方法: remove( ...
随机推荐
- 解决Vs控制台程序出现NuGet\profile.ps1,因为在此系统上禁止运行脚本错误时或提示:“无法加载文件 \.nuget\packages\Microsoft.EntityFrameworkCore.Tools\1.1.0-preview4-final\tools\init.ps1,因为在此系统上禁止运行脚本”
1,打开Windows PowerShell 2.输入 set-executionpolicy remotesigned 即可执行脚本 如果执行命令失败的话重新选择Windows PowerShell ...
- DBShop前台RCE
前言 处理重装系统的Controller在判断是否有锁文件后用的是重定向而不是exit,这样后面的逻辑代码还是会执行,导致了数据库重装漏洞和RCE. 正文 InstallController.php中 ...
- Windows Server 2012 R2上安装.Net4.6.1出错
在Windows Server 2012 R2上安装.Net4.6.1时提示“你需要先安装对应于 KB2919355 的更新,然后才可在……”解决方式: 在官网下载更新包,下载地址:https://w ...
- USB原理简单叙述
USB简介: USB的几种版本: 1. USB 1.0:速度 1.5Mb/s 2. USB 1.1:速度 12Mb/s 3. USB 2.0:速度 60MbB/s 4. USB 3.0:速度 640M ...
- 一个 Git 分支协作模式的进化故事
从不用版本管理到使用 Git 分支管理的故事,也就是从这个时候开始的... 某公司只有一个程序员,一开始并没有版本管理的概念.项目开发只有一个人在参与,所以也没用版本管理工具. 后来,老板又招了两个程 ...
- Computer Vision_33_SIFT:A novel coarse-to-fine scheme for automatic image registration based on SIFT and mutual information——2014
此部分是计算机视觉部分,主要侧重在底层特征提取,视频分析,跟踪,目标检测和识别方面等方面.对于自己不太熟悉的领域比如摄像机标定和立体视觉,仅仅列出上google上引用次数比较多的文献.有一些刚刚出版的 ...
- springboot系列(十)springboot整合shiro实现登录认证
关于shiro的概念和知识本篇不做详细介绍,但是shiro的概念还是需要做做功课的要不无法理解它的运作原理就无法理解使用shiro: 本篇主要讲解如何使用shiro实现登录认证,下篇讲解使用shiro ...
- Tornado框架 源码基本分析
在python2 的环境中 pip install tornado==1.2.1 1.2.1版本Tornado源码少,利于了解. import tornado.ioloop import tornad ...
- Linux命令——uptime
参考:linux中uptime命令查看linux系统负载 Linux uptime command 简介 uptim告诉你系统运行了多长时间.uptime命令提供单行显示的输出,包含如下信息: 当前时 ...
- 【HCIA Gauss】学习汇总-数据库管理(数据库设计 范式 索引 分区)-7
zsql user/pasword@ip:port -c "show databases" # 展示一条sql语句 spool file_path 指定输出文件 可以为相对路径 s ...