go 数组
数组的定义和 初始化
数组是同一类型的元素集合
var a []int
//定义⼀个数组
Go中数组下标从0开始,因此长度为n的数组下标范围:[0,n-1]
整数数组中的元素默认初始化为0,字符串数组中的元素默认初始化为" "
数组初始化
var a []int
a[] =
a[] =
a[] =
//数组初始化
var a []int = []int{, , }
//定义时数组初始化
a := []int{, , }
//定义时数组初始化
a := […]int{, , }
//定义时数组初始化
a := []int{}
//定义时数组初始化
a := []int{:}
//定义时数组初始化
package main
import "fmt"
// 数组初始化
func test1() {
var a []int
a[] =
a[] =
a[] =
fmt.Println(a) // [1 2 3 0 0]
}
func test2() {
var a []int = []int{, , , , }
fmt.Println(a) // [1 2 3 4 5]
}
func test3() {
a := []int{, , , , }
fmt.Println(a) // [1 2 3 4 5]
}
func test4() {
a := [...]int{, , , , }
fmt.Println(a) // [1 2 3 4 5]
}
func test5() {
a := []int{}
fmt.Println(a) //[5 0 0]
}
func test6(){
a := []int{:, :}
fmt.Println(a) //[0 0 20 30 0]
}
func main() {
// test1()
// test2()
// test3()
// test4()
// test5()
test6()
}
数组的长度是类型的一部分
var a []int
a[] =
a[] =
a[] =
var b []int
b = a // 报错 a、b是不同类型的数组,不能赋值
package main
import "fmt"
func test1() {
// var a [3]int;
// b := [4]int{1,2,3,4}
// a = b 报错 不是 同类型的数组 不能直接 赋值
var c []int
d := []int{, , , }
c = d
fmt.Printf("c=%v\n", c)
fmt.Printf("d=%v\n", d)
}
/*
c=[1 2 3 4]
d=[1 2 3 4]
*/
func main() {
test1()
}
数组的遍历
方式一
var a []int
a[] =
a[] =
a[] =
for i := ; i < len(a); i++ { }
方式二
var a []int
a[] =
a[] =
a[] =
for index, val := range a {
}
举例
package main
import "fmt"
func test1() {
a := []int{, , , , }
for i := ; i < len(a); i++ {
fmt.Printf("a[%d]=%d\n", i, a[i])
}
}
func test2(){
a := []int{, , , , }
for index, val := range a {
fmt.Printf("a[%d]=%d\n", index, val)
}
}
/*
a[0]=1
a[1]=2
a[2]=3
a[3]=4
a[4]=5
*/
func main() {
// test1()
test2()
}
二维数组
package main
import "fmt"
func test1() {
var a [][]int
a[][] =
a[][] =
a[][] =
a[][] =
a[][] =
a[][] =
fmt.Println(a) // [[1 2] [3 4] [5 6]]
}
func test2() {
var a [][]int = [][]int{{, }, {, }, {, }}
for i := ; i < len(a); i++ {
for j := ; j < len(a[i]); j++ {
fmt.Printf("a[%d][%d] = %d\n", i, j, a[i][j])
}
fmt.Printf("\n")
}
}
func test3(){
var a [][]int = [][]int{{, }, {, }, {, }}
for index, val := range(a){
for i,v:= range(val){
fmt.Printf("a[%d][%d] = %d\n", index, i ,v)
}
fmt.Printf("\n")
}
}
func main() {
// test1()
// test2()
test3()
}
package main import (
"fmt"
)
func printarray(a [][]string) {
for _, v1 := range a {
for _, v2 := range v1 {
fmt.Printf("%s ", v2)
}
fmt.Printf("\n")
}
}
func main() {
a := [][]string{
{"lion", "tiger"},
{"cat", "dog"},
{"pigeon", "peacock"},
}
printarray(a)
var b [][]string
b[][] = "apple"
b[][] = "samsung"
b[][] = "microsoft"
b[][] = "google"
b[][] = "AT&T"
b[][] = "T-Mobile"
fmt.Printf("\n")
printarray(b)
}
数组拷贝和传参
数组是值类型
var a []int
a[] =
a[] =
a[] =
b := a
//b了数组a中所有元素
b[] =
fmt.Println(a, b)
a [10,20,30]
b [1000,20,30]
数组是值类型,函数传参也会拷贝
func main() {
var a []int
a[] =
a[] =
a[] =
modify(a)
fmt.Println(a)
}
func modify(b []int) {
b[] =
return
}
a [10,20,30]
b [1000,20,30]
练习
求数组所有元素之和
package main import (
"fmt"
"math/rand"
"time"
) func test1(a []int) int {
var sum int
// for i := 0; i < len(a); i++ {
// sum += a[i]
// } for _, v := range a {
sum += v
}
return sum
} func run() int {
rand.Seed(time.Now().Unix()) // 不设置 这个的话 rand.Intn() 取到的数据 都是 一样的
var a []int
for i := ; i < len(a); i++ {
a[i] = rand.Intn() // rand.Intn(n) 随机取出 0 - n-1 的整数
// a[i] = rand.Int() // rand.Intn() 随机取出 0- int最大范围之间的 的整数
} sum := test1(a)
return sum
} func main() {
sum := run()
fmt.Println(sum)
}
package main
import "fmt"
// 找出数组中和为给定值的两个元素的下标,例如数组:[1,3,5,8,7],找出两个元素之和等于8的下标分别是(0, 4)和(1,2)
func sumTwo(a []int, target int) {
for i := ; i < len(a); i++ {
b := target - a[i]
for j := i + ; j < len(a); j++ {
if b == a[j] {
fmt.Printf("(%d, %d)\n", i, j)
}
}
}
}
func main() {
var a []int = []int{, , , , }
sumTwo(a, )
}
go 数组的更多相关文章
- javascript中的Array对象 —— 数组的合并、转换、迭代、排序、堆栈
Array 是javascript中经常用到的数据类型.javascript 的数组其他语言中数组的最大的区别是其每个数组项都可以保存任何类型的数据.本文主要讨论javascript中数组的声明.转换 ...
- 探究javascript对象和数组的异同,及函数变量缓存技巧
javascript中最经典也最受非议的一句话就是:javascript中一切皆是对象.这篇重点要提到的,就是任何jser都不陌生的Object和Array. 有段时间曾经很诧异,到底两种数据类型用来 ...
- 编写高质量代码:改善Java程序的151个建议(第5章:数组和集合___建议75~78)
建议75:集合中的元素必须做到compareTo和equals同步 实现了Comparable接口的元素就可以排序,compareTo方法是Comparable接口要求必须实现的,它与equals方法 ...
- 了解PHP中的Array数组和foreach
1. 了解数组 PHP 中的数组实际上是一个有序映射.映射是一种把 values 关联到 keys 的类型.详细的解释可参见:PHP.net中的Array数组 . 2.例子:一般的数组 这里,我 ...
- JavaScript权威指南 - 数组
JavaScript数组是一种特殊类型的对象. JavaScript数组元素可以为任意类型,最大容纳232-1个元素. JavaScript数组是动态的,有新元素添加时,自动更新length属性. J ...
- JavaScript常见的五种数组去重的方式
▓▓▓▓▓▓ 大致介绍 JavaScript的数组去重问题在许多面试中都会遇到,现在做个总结 先来建立一个数组 var arr = [1,2,3,3,2,'我','我',34,'我的',NaN,NaN ...
- js:给定两个数组,如何判断他们的相对应下标的元素类型是一样的
题目: 给Array对象原型上添加一个sameStructureAs方法,该方法接收一个任意类型的参数,要求返回当前数组与传入参数数组(假定是)相对应下标的元素类型是否一致. 假设已经写好了Array ...
- javascript数组查重方法总结
文章参考地址:http://blog.csdn.net/chengxuyuan20100425/article/details/8497277 题目 对下列数组去重: var arr = ['aa', ...
- 掌握javascript中的最基础数据结构-----数组
这是一篇<数据结构与算法javascript描述>的读书笔记.主要梳理了关于数组的知识.部分内容及源码来自原作. 书中第一章介绍了如何配置javascript运行环境:javascript ...
- 小兔JS教程(四)-- 彻底攻略JS数组
在开始本章之前,先给出上一节的答案,参考答案地址: http://www.xiaotublog.com/demo.html?path=homework/03/index2 1.JS数组的三大特性 在J ...
随机推荐
- 【Java并发编程】之五:volatile变量修饰符—意料之外的问题
volatile用处说明 在JDK1.2之前,Java的内存模型实现总是从主存(即共享内存)读取变量,是不需要进行特别的注意的.而随着JVM的成熟和优化,现在在多线程环境下volatile关键字的 ...
- Qt 删除目录
删除目标的目录,若该目录下有子目录,一并删除. //判断是否存在子目录 bool judgeDir(QDir dir) { dir.setFilter(QDir::AllEntries | QDir: ...
- Candies CodeForces - 991C(二分水题)
就是二分暴力就好了 为什么要记下来 呵呵....emm你说为什么... 行吧 好吧 我一直以为我的二分出问题了 原来不是 依旧很帅 统计的时候求的减了多少次 然后用次数乘了mid 这样做会使那个人获 ...
- [BZOJ2288&BZOJ1150]一类堆+链表+贪心问题
今天我们来介绍一系列比较经典的堆+链表问题.这类问题的特点是用堆选取最优解,并且通过一些加减操作来实现"反悔". 在看题之前,我们先来介绍一个神器:手写堆. 手写堆的一大好处就是可 ...
- HIGH-SPEED PACKET PROCESSING USING RECONFIGURABLE COMPUTING
摘要 本文介绍了一种新的工具链,它将一门称为 PX 的专门用于包处理的编程语言运用到基于 FPGA 技术的高性能可重构计算架构(HIGH-PERFORMANCE RECONFIGURABLECOMPU ...
- 【CF835D】Palindromic characteristics 加强版 解题报告
[CF835D]Palindromic characteristics 加强版 Description 给你一个串,让你求出\(k\)阶回文子串有多少个.\(k\)从\(1\)到\(n\). \(k\ ...
- Android应用自动更新功能的实现!
Android应用自动更新功能的实现!http://blog.csdn.net/android_tutor/article/details/7015986 private static final i ...
- python检测服务器是否ping通
好想在2014结束前再赶出个10篇博文来,~(>_<)~,不写博客真不是一个好兆头,至少说明对学习的欲望和对知识的研究都不是那么积极了,如果说这1天的时间我能赶出几篇精致的博文,你们信不信 ...
- SpringMVC 上传文件(文件非必填)MultipartHttpServletRequest
原文:https://blog.csdn.net/dorothy1224/article/details/79136676 上传文件(文件非必填)MultipartHttpServletRequest ...
- 题解【51nod 1290 Counting Diff Pairs】
Description 求区间内有多少对 \((i,j)\) 满足 \(|a_i - a_j| \leq k\) Solution 可以莫队做(万能的莫队) 只需要考虑加入一个数会产生多少贡献即可 离 ...