首页 > 其他分享 >golang数组

golang数组

时间:2023-01-09 23:13:33浏览次数:51  
标签:... int fmt golang var 数组 Println

目录

数组特性

  • 数据类型集合,一旦声明长度,无法更改,通过下标访问数组值
  • 数组赋值,是复制,不会改变原始数组长度

语法

  • var 数据变量名 [数组长度]T

数组内存结构

type ArrHeader struct {
    Data uintptr
    Len  int
}  
数组内存结构简单

[4]int{2,3,5,7} 数组值对应的内存结构

数组声明

var num [3]int   // 长度为3的int数组
fmt.Println(num) // [0,0,0]

var str [3]string // 长度为3的string数组
fmt.Println(str)  // [ ]

var num1 = [3]int{1, 2, 3} // 声明数组并且初始化
fmt.Println(num1)

var str1 = [...]string{"a", "b", "c"} // 声明数组并初始化 ...数组会自己计算长度
fmt.Println(str1)

var num2 = [...]int{1: 2, 2: 2, 8: 3} // 声明数组并初始化 索引 : 值
fmt.Println(num2)                     // [0 2 2 0 0 0 0 0 3]
fmt.Println(len(num2))                // 9

数组赋值

根据特性 赋值是复制,不会改变原始数组,所以大型数组赋值要考虑效率

var num3 = [...]int{1, 2}
fmt.Println(num3) // [1,2]
num3[1] = 100
fmt.Println(num3) // [1, 100]

数组指针

  • 数组指针和数组操作基本类是
  • 大型数组赋值推荐
var str2 = [...]string{"a", "b"}
var str3 = &str2     // str3 是指向数组的指针
fmt.Println(str3)    // &[a b]
fmt.Println(str3[0]) // a

数组方法

len() 获取数组长度

var num4 = [...]int{1, 2, 3}
fmt.Println(len(num4)) // 3 获取数组长度 len

cap() 获取数组容量

var num4_1 = [...]int{1, 2, 3}
fmt.Println(cap(num4_1)) // 3 获取数组长度 cap

数组遍历

for

  • for 遍历在复杂情况下 可能会出现数组下标越界
var str4 = [...]string{"a", "b"}
for i := 0; i < len(str4); i++ {
	fmt.Println(str4[i])
}

for rang 推荐 最佳

var num5 = [...]int{1, 2, 3, 4, 5}
for key, value := range num5 {
    fmt.Printf("key: %d value: %d \n", key, value)
}
// key: 0 value: 1 
// key: 1 value: 2 
// key: 2 value: 3 
// key: 3 value: 4 
// key: 4 value: 5

数组类型扩展

数组类型是切片和字符串等结构的基础。以上数组的很多操作都可以直接用于字符串或切片中。

1.字符串数组

var str = [...]string{"a", "b", "c"}
fmt.Println(str) // [a b c]

var str1 = [...]string{0: "a1", 1: "b1"}
fmt.Println(str1) // [a1 b1]

2.结构体数组

var line1 [2]User
fmt.Println(line1) // [{0  0} {0  0}]

var line2 = [2]User{{Id: 1, Name: "zds", Age: 19}, {Id: 2, Name: "zdc", Age: 18}}
fmt.Println(line2) // [{1 zds 19} {2 zdc 18}]

3.接口数组

var unknown1 [2]interface{}
fmt.Println(unknown1[:]...) // <nil> <nil>
var unknown2 = [...]interface{}{1, "123"}
fmt.Println(unknown2) // [1 123]

4.管道数组

var ch [2]chan int
fmt.Println(ch) // [<nil> <nil>]
var ch2 = [2]chan int{}
fmt.Println(ch2) // [<nil> <nil>]

5.图像解码器数组

var decoder1 [2]func(io.Reader) (image.Image, error)
fmt.Println(decoder1)
var decoder2 = [...]func(io.Reader) (image.Image, error){
    png.Decode,
    jpeg.Decode,
}
fmt.Println(decoder2)

6.空数组

// 1.长度为0的不在内存空间
// 2.用于强调某种特有类型的操作时避免分配额外的内存空间
c1 := make(chan [0]int)
go func() {
    fmt.Println("c1")
    c1 <- [0]int{}
}()
<-c1

标签:...,int,fmt,golang,var,数组,Println
From: https://www.cnblogs.com/sjie/p/17038797.html

相关文章

  • golang 解析xml 同时解析 attr 和 value
    xml长这样<ModifyKeys><ModifyKeyVKCode="91">LWin</ModifyKey><ModifyKeyVKCode="92">RWin</ModifyKey><ModifyKeyV......
  • Vue判断数组元素是否为undefined
    问题:现在有这样一个数组,没有第一个元素,如何判断该位置为空控制台输出为undefinde首先尝试array[0]===undefined,可以需要修改为array[0]==="undefinde"这样不行......
  • 利用折半查找法去找一个有序数组中你要找的数并输出
    从一个数组中寻找你要找的数并输出角标其中一种解决方法便是遍历数组找到你要的那个数。#include<stdio.h>intmain(){inta[]={1,2,3,4,5,6,7,8,9},flag=0;......
  • LeetCode.977 有序数组的平方
    1.题目给你一个按 非递减顺序 排序的整数数组 ​​​​nums​​​​,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。2.代码classSolution{public......
  • shell字符与数组之间的判断
    shell字符与数组之间的判断[[数组=~字符]]循环判断,匹配返回true if![[$allServer=~$1]]&&[$1!="all"];then echo"notfindparameter:$1,param......
  • 后缀数组 I —— 后缀排序
    后缀数组(suffixarray)是省选字符串题目中非常重要的算法。本文将简略讲述其\(O(n\logn)\)求法,对于时间复杂度更优秀但notpractical的做法不作提及。模板考虑一种......
  • Json-Tutorial05 数组解析
    前言本节将要学习的是第一种复合类型的解析:数组。具体的解析规则在Tutorial中已经有了,概括下简单的思想就是遇到[符号之后挨个调用lept_parse_value来解析数组的每一个元......
  • ES6-解构赋值(数组)
    一.概念:解析某一数据的结构,将我们想要的东西提取出来,赋值给变量或者常量1const[a,b,c]=[1,2,3];2console.log(a,b,c);//123二.数组的解构......
  • 数组排序
    /***数组元素交换位置*@param{array}arr数组*@param{number}index1添加项目的位置*@param{number}index2删除项目的位置*index1和index2分别是两个数组......
  • 数组模拟环形队列
    图示:代码:1importjava.util.Scanner;23publicclassRingQueueTest{4publicstaticvoidmain(String[]args){5//创建一个环形队......