首页 > 其他分享 >12、数组

12、数组

时间:2023-04-02 20:46:22浏览次数:39  
标签:12 数组 int fmt arr2 arr1 Println

1.数组的概念

Go语言提供了数组类型的数据结构。数组是具有相同唯一类型的一组已编号且长度固定的数据项序列,这种类型可以是任意的原始类型例如整形、字符串或者自定义类型。
数组元素可以通过索引 (位置) 来读取 (或者修改),索引从0开始第一个元素索引为0,第二个索引为 1,以此类推。数组的下标取值范围是从0开始,到长度减1。
数组一旦定义后,大小不能更改。

2.语法格式

// 写法1:
var variable_name [SIZE] variable_type

var arr1 [3]int
arr1[0] = 1
arr1[1] = 2
arr1[2] = 3
fmt.Println(arr1[0])
fmt.Println(arr1[1])
fmt.Println(arr1[2])

// 写法2:
var variable_name = [SIZE] variable_type {ele1,ele2......}
var arr2 = [5]int{1, 2, 3}
fmt.Println(arr2)
fmt.Println(arr2[2])
// 没赋值的地方会给默认值
fmt.Println(arr2[4])
// 注意:获取数组元素时,下标不要越界了
// fmt.Println(arr2[5])

// 写法3:
variable_name := [...] variable_type {元素......}
// 这种方式可以根据元素的个数自行推断数组长度
arr3 := [...]int{10, 20, 30}
fmt.Println(arr3)
fmt.Println(arr3[2])
fmt.Println(len(arr3))
fmt.Println(cap(arr3))

// 我们还可以指定位置初始化数据
arr4 := [...]int{1: 100, 3: 200, 9: 500}
fmt.Println(arr4)
fmt.Println(arr4[9])
fmt.Println(len(arr4))
fmt.Println(cap(arr4))

3.内置函数

  • len(array/map/slice/string):容器中实际存储的数据量 ==> 长度
  • cap():容器中能够存储的最大数量 ==> 容量
    值得注意的是:这两个内置函数不仅仅是在数组中有

4.数组的遍历

arr1 := [10]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
	// 方式一:
	for i := 0; i < len(arr1); i++ {
		fmt.Println(i, "位置的元素为:", arr1[i])
	}

	// 方式二:for_range
	for index, value := range arr1 { // 有一说一,这玩意儿怎么看怎么像vue中的v-for、thymeleaf中的for
		fmt.Printf("下标是:%d,值为:%d \n", index, value)
	}

	// 下划线舍弃index
	sum := 0
	for _, value := range arr1 {
		sum += value
	}
	fmt.Println("sum:", sum)

5.数组是值类型

数据类型:

  • 基本类型:int,float,string,bool。
  • 复合类型: array,slice,map,function,pointer,channel。

数组的数据类型:[size]type

值类型:理解为存储的数值本身将数据传递给其他的变量,传递的是数据的副本(备份)
例如:int,float,string,bool,array

引用类型:理解为存储的数据的内存地址
例如:slice,map。。

arr2 := [4]int{1, 2}
arr3 := [4]string{"zs", "ls"}
arr4 := [4]float64{1, 2, 3}
arr5 := [4]int{1, 2, 3}

fmt.Printf("%T \n", arr2)
fmt.Printf("%T \n", arr3)
fmt.Printf("%T \n", arr4)
fmt.Printf("%T \n", arr5)

// 修改arr5的值不会影响arr6,这里和Java中不太一样
arr6 := arr5
fmt.Println("arr6的值为:", arr6)
arr5[2] = 10
fmt.Println("arr5的值为:", arr5)
fmt.Println("arr6的值为:", arr6)

fmt.Println(arr2 == arr5)

arr2[2] = 10
fmt.Println(arr2 == arr5)

6.数组的排序

arrayOne := [...]int{100, 120, 98, 33, 76, 43, 9, 23, 37, 98}

	// 冒泡排序
	for i := 0; i < len(arrayOne); i++ {
		for j := 0; j < len(arrayOne)-i-1; j++ {
			if arrayOne[j] > arrayOne[j+1] {
				arrayOne[j], arrayOne[j+1] = arrayOne[j+1], arrayOne[j]
			}
		}
	}

	fmt.Println(arrayOne)

7.二维数组

/**
 * @author ly (个人博客:https://www.cnblogs.com/qbbit)
 * @date 2023/4/2  20:02
 * @tags 喜欢就去努力的争取
 */
package main

import "fmt"

func main() {

	// 以为数组定义方式
	var arr1 = [3]int{1, 2, 3}
	fmt.Printf("数组的类型:%T,\t数组的内存地址:%p,\t数组的值:%d", arr1, arr1, arr1)

	/**
	二维数组定义方式
		值得注意的是二位数组里的存的是一维数组
		以为数组里存的才是最后的元素值
	*/
	var arr2 = [3][4]float64{{1.1, 1.2, 1.3, 1.4}, {2.1, 2.2, 2.3, 2.4}, {3.1, 3.2, 3.3, 3.4}}
	arr3 := [1][2]int{{10, 20}}
	arr4 := [...][7]int{{2: 5, 6: 9}, {1: 5, 5: 9}}

	// 获取一维数组
	float64Arr1 := arr2[1]
	fmt.Println(float64Arr1)

	// 获取元素值
	result := arr2[2][2]
	fmt.Println(result)

	// 获取以为二维数组中一维数组的个数
	fmt.Println("一维数组的个数:", len(arr3))

	// 获取一维数组中的元素个数
	fmt.Println("以为数组中元素的个数:", len(arr3[0]))

	// 输出内存地址
	fmt.Printf("内存地址为:%p \n", &arr4)

	// 普通方式遍历二维数组
	for j := 0; j < len(arr2); j++ {
		for i := 0; i < len(arr2[j]); i++ {
			fmt.Println("普通方式遍历二维数组", arr2[j][i])
		}
	}

	// for range 方式遍历
	for _, inner := range arr2 {
		for _, value := range inner {
			fmt.Println("for range 方式遍历二维数组", value)
		}
	}
}

标签:12,数组,int,fmt,arr2,arr1,Println
From: https://www.cnblogs.com/qbbit/p/17279830.html

相关文章

  • NOI 1.8编程基础之多维数组
    02:同行列对角线的格子1.描述输入三个自然数N,i,j (1<=i<=N,1<=j<=N),输出在一个N*N格的棋盘中(行列均从1开始编号),与格子(i,j)同行、同列、同一对角线的所有格子的位置。如:n=4,i=2,j=3表示了棋盘中的第二行第三列的格子,如下图:第一列第二列第三列第四列     ......
  • 数组练习1
    1、将密码文件的每一行作为元数赋值给数组  2、使用关联数组统计密码文件中用户使用的不同类型shell的数量   3、使用关联数组按扩展名统计指定目录中文件的数量  ......
  • 5.函数6.数组7.操作符8.常见关键字9.#define定义的常量和宏
    在我们学习的数学里面,函数的概念例子比如f(x)=2*x+1;  f(x,y)=x+y;在c语言也是同样的样子比如,我举例一条要相加的例子#definr_#include<stdio.h>intAdd(intx,inty)//int是他的返回类型是个整形,所以要加int//这就是一个函数add是自己创建的一个函数名,括号里面叫做函数的......
  • java数组的创建和使用
    声明数组必须先声明后使用,数组的声明有两种方法:1.C语言风格声明:dataTypearrayRefVar[];2.Java风格声明:dataType[]arrayRefVar;一般推荐使用第二种Java风格的声明方式。创建数组声明的数组并不具备物理空间,需要使用new操作符来创建数组,为其分配内存空间:dataType[......
  • 202031607129-杨炜 实验一 软件工程准备—博客园技巧与博客首秀
    项目内容班级博客链接2023年春软件工程(2020级计算机科学与技术本次作业要求链接实验一软件工程准备我的课程学习目标注册博客园和Github账号,学习使用博客园,了解Github的基本操作。本次作业在哪些方面帮我实现学习目标按照实验内容,借助各种链接的例子,一步步......
  • Shell数组练习
    1、将/etc/shadow文件的每一行作为元素赋值给数组#!/bin/bash#统计行数,作为循环次数num=`wc-l</etc/shadow`for((i=0;i<=num;i++))do#根据i的变化取前i行内容再然后截取最后一行加入数组中array[$i]=$(head-$i/etc/shadow|tail-1)done#依次输出数组中......
  • 215. 数组中的第K个最大元素
    参考:https://leetcode.cn/problems/kth-largest-element-in-an-array/solutions/19607/partitionfen-er-zhi-zhi-you-xian-dui-lie-java-dai-/https://www.bilibili.com/video/BV1La411J7q9/?spm_id_from=333.999.0.0classSolution{publicintfindKthLargest(int[]n......
  • 713. 乘积小于 K 的子数组
    力扣题目链接给你一个整数数组 nums 和一个整数 k ,请你返回子数组内所有元素的乘积严格小于 k 的连续子数组的数目。 示例1:输入:nums=[10,5,2,6],k=100输出:8解释:8个乘积小于100的子数组分别为:[10]、[5]、[2],、[6]、[10,5]、[5,2]、[2,6]、[5,2,6]。需要注......
  • 面试题45(Java)-把数组排成最小的数(中等)
    题目:输入一个非负整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。示例1:输入:[10,2]输出:"102"示例 2:输入:[3,30,34,5,9]输出:"3033459"提示:0<nums.length<=100说明:输出结果可能非常大,所以你需要返回一个字符串而不......
  • AcWing 12. 背包问题求具体方案
    有 N 件物品和一个容量是 V 的背包。每件物品只能使用一次。第 i 件物品的体积是 vi,价值是 wi。求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。输出 字典序最小的方案。这里的字典序是指:所选物品的编号所构成的序列。物品的编号范围是 1…......