C#中的数组探究与学习
wptr33 2025-04-29 05:36 29 浏览
C#中的数组一般分为:
①.一维数组。
②.多维数组,也叫矩形数组。
③.锯齿数组,也叫交错数组。
一.数组定义:
数组是一种聚合数据类型,它是将具有相同类型的若干变量有序地组织在一起的集合,是最基本的数据结构。
一个数组可以分解为多个数组元素,按照数据元素的类型,数组可以分为整型数组、字符型数组、浮点型数组、指针数组和结构数组等。数组还可以有一维、二维以及多维等表现形式。
一.数组存在的意义:
为什么要使用数组?
声明数组变量并不是Number0,Number1,Number2,...,Number999一个个单独的变量,而是声明一个就像 Numbers这样的变量,然后使Numbers[0],Numbers[1],Numbers[2],...,Numbers[999]来表示一个个单独的变量。数组中某个指定的元素是通过索引来访问的。
什么是数组?
Number0,Number1,Number2,...,Number999一个个单独的变量,这样的操作非常频繁并且执行效率低。那这个时候发明numbers的作者为了提高开发效率,防止代码冗余,给我们引入了一种新的数据类型,那这种就叫做数组类型。
数组都是由连续的内存位置组成的。最低的地址对应第一个元素,最高的地址对应最后一个元素。
我们把Number0,Number1,Number2,...,Number999集中在一起定义成一个类型,这个类型就是数组类型numbers,这些数的类型要求必须一致,并且在定义的时候必须指定个数也就是数组的长度Length。同时这些数的内存空间是连续开辟的, 而且是存放在托管堆中,这就是数组的定义
数组的表示方法:
数据类型[] 数组名;
数据类型[] Numbers ={Numbers[0],Numbers[1],Numbers[2],...,Numbers[999]}
C#一维数组
表示数组
数据类型[] 数组名;
1初始化数组中的元素
数据类型[] 数组名 = new 数据类型[长度];
数据类型[] 数组名 = {值 1, 值 2, …}
数据类型[] 数组名 = new 数据类型[长度]{值 1,值 2,…}
//有一个 int 类型的数组,输出数组中的第一个元素和最后一个元素
//定义int类型的数组
int[] array= { 1, 2, 3 };
2. 一维数据的表示方法
第一种方式:
int[] array;
array=new int[3]{1,2,3};
第二种方式:
int[] array=new int[]{1,2,3};
第三种方式
int[] array={1,2,3};
一维数组的遍历
第一种方式:
for(int i=0;i<3;i++)
{
Console.WriteLine(数组名称[i]);
}
第二种方式:
foreach(int value in 数组名称)
{
Console.WriteLine(value);
}
for和foreach的区别
1、从底层实现上:foreach是通过指针偏移实现的(最初在-1位置,每循环一次,指针就便宜一个单位),而for循环是通过当前索引相对零索引的偏移量(通过首地址和地址偏移量)计算实际访问地址实现的;
2、从编码结构上:foreach语句省去了for语句中设置循环起点和循环条件的过程;
3、从使用要求上:使用foreach语句遍历对象要求对象类型实现了枚举接口IEnumerable;
C#多维数组
1初始化数组中的元素
//定义多维数组
数据类型[ , , ...] 数组名;
//创建多维数组并初始化
数据类型[ , , ...] 数组名 = new 数据类型[m,n,...] {{ , , ...},{ , , ...}};
2.多数组表示方法
第一种形式:
int[,] array=new int[3,4]{{1,2,3,4},{5,6,7,8},{9,10,11,12}};
第二种形式:
int[,] array=new int[,]{{1,2,3,4},{5,6,7,8},{9,10,11,12}};
第三种形式:
int[,] array={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
3.多数组的遍历
第一种方式:
for (int i = 0; i < 数组元素长度; i++)//行数
{
for (int j = 0; j < 数组元素长度; j++)//列数
{
Console.WriteLine(a[i, j]);
}
}
第二种方式:
int[,] array= new int[3, 4] { { 1, 2, 3, 4 }, { 5, 6, 7, 8 }, { 9, 10, 11, 12 } };
for (int i = 0; i < a.GetLength(0); i++)//行数
{
for (int j = 0; j < a.GetLength(1); j++)//列数
{
Console.Write("{0}\t",a[i, j]);
}
Console.WriteLine();
}
C#锯齿数组
1初始化数组中的元素
锯齿数组又称为交错数组,数组中的每一个元素都是另一个数组,所有锯齿数组也叫作数组的数组,但是要注意,这些数组都必须要有相同的基本类型。
锯齿数组的声明和初始化
(1)锯齿数组声明
int[][] JoinArray;//声明一个int型锯齿数组JoinArray
(2)锯齿数组初始化
初始化JoinArray数组含有2个子数组(即数值中2个元素为另外2个数组)
JoinArray= new int[2][];//初始化jaggedArray数组
JoinArray[0] = new int[3] { 1, 2, 3 };//第一个元素为一个长度为3的一维数组
JoinArray[1] = new int[4] { 4, 5, 6, 7 };//第二个元素为一个长度为4的一维数组
还可以改进锯齿数组的声明和初始化,将声明和初始化写在一行代码:
int[][] JoinArray= new int[2][] { new int[] { 1, 2, 3 }, new int[] { 4, 5, 6, 7 } };
2. 表示方法
第一种方式:
int[][] array=new int[3][]{new int[]{1,2,3},new int[]{4,5},new int[]{6,7,8}};
第二种方式:
int[][] array=new int[][]{new int[]{1,2,3},new int[]{4,5},new int[]{6,7,8}};
第三种方式
int[][] array={new int[]{1,2,3},new int[]{4,5},new int[]{6,7,8}};
3. 数组的遍历
int[][] array= new int[3][] { new int[] { 12, 213, 34 }, new int[] { 10, 12 }, new
int[] { 54, 87, 98 } };
for (int i = 0; i < a.GetLength(0); i++)
{
for (int j = 0; j < a[i].Length; j++)
{
Console.Write("{0}\t", a[i][j]);
}
Console.WriteLine();
}
Console.ReadKey();
初始化的意义:
我们数组定义成一个数据类型,这个类型就是数组类型,这些数的类型通常是相同,并且在定义数组的时候必须指定数组长度,在内存空间里面是连贯的,而且是固定存放在内存空间中。赋予一定数据类型的数值。(注意:不初始化直接报错。)
声明一个数组不会在内存中初始化数组。当初始化数组变量时,您可以赋值给数组。
数组是一个引用类型,所以您需要使用 new 关键字来创建数组的实例。
数组特点
关键字new:表示在内存中开辟空间。
数组是由每一个元素数据组成,所以每一个数据可以叫元素。元素从从First到Last
Leghth长度代表元素的个数
数组范围:不能超出索引范围,超出范围就会异常错误。
固定大小,数组的大小是初始化时决定的,无法扩容(怎么扩容)。
强类型,存储数据元素类型必须在初始化时指定,数组只能存储一种类型的数据。
按照索引查询元素速度快、遍历数组方便;添加,删除操作慢,因为要移动其他的元素。
适用场景:
频繁查询,对存储空间要求不大,很少增加和删除的情况。
- 上一篇:如何用c#优雅的写函数式
- 下一篇:SQL执行顺序(SqlServer)
相关推荐
- oracle数据导入导出_oracle数据导入导出工具
-
关于oracle的数据导入导出,这个功能的使用场景,一般是换服务环境,把原先的oracle数据导入到另外一台oracle数据库,或者导出备份使用。只不过oracle的导入导出命令不好记忆,稍稍有点复杂...
- 继续学习Python中的while true/break语句
-
上次讲到if语句的用法,大家在微信公众号问了小编很多问题,那么小编在这几种解决一下,1.else和elif是子模块,不能单独使用2.一个if语句中可以包括很多个elif语句,但结尾只能有一个...
- python continue和break的区别_python中break语句和continue语句的区别
-
python中循环语句经常会使用continue和break,那么这2者的区别是?continue是跳出本次循环,进行下一次循环;break是跳出整个循环;例如:...
- 简单学Python——关键字6——break和continue
-
Python退出循环,有break语句和continue语句两种实现方式。break语句和continue语句的区别:break语句作用是终止循环。continue语句作用是跳出本轮循环,继续下一次循...
- 2-1,0基础学Python之 break退出循环、 continue继续循环 多重循
-
用for循环或者while循环时,如果要在循环体内直接退出循环,可以使用break语句。比如计算1至100的整数和,我们用while来实现:sum=0x=1whileTrue...
- Python 中 break 和 continue 傻傻分不清
-
大家好啊,我是大田。...
- python中的流程控制语句:continue、break 和 return使用方法
-
Python中,continue、break和return是控制流程的关键语句,用于在循环或函数中提前退出或跳过某些操作。它们的用途和区别如下:1.continue(跳过当前循环的剩余部分,进...
- L017:continue和break - 教程文案
-
continue和break在Python中,continue和break是用于控制循环(如for和while)执行流程的关键字,它们的作用如下:1.continue:跳过当前迭代,...
- 作为前端开发者,你都经历过怎样的面试?
-
已经裸辞1个月了,最近开始投简历找工作,遇到各种各样的面试,今天分享一下。其实在职的时候也做过面试官,面试官时,感觉自己问的问题很难区分候选人的能力,最好的办法就是看看候选人的github上的代码仓库...
- 面试被问 const 是否不可变?这样回答才显功底
-
作为前端开发者,我在学习ES6特性时,总被const的"善变"搞得一头雾水——为什么用const声明的数组还能push元素?为什么基本类型赋值就会报错?直到翻遍MDN文档、对着内存图反...
- 2023金九银十必看前端面试题!2w字精品!
-
导文2023金九银十必看前端面试题!金九银十黄金期来了想要跳槽的小伙伴快来看啊CSS1.请解释CSS的盒模型是什么,并描述其组成部分。...
- 前端面试总结_前端面试题整理
-
记得当时大二的时候,看到实验室的学长学姐忙于各种春招,有些收获了大厂offer,有些还在苦苦面试,其实那时候的心里还蛮忐忑的,不知道自己大三的时候会是什么样的一个水平,所以从19年的寒假放完,大二下学...
- 由浅入深,66条JavaScript面试知识点(七)
-
作者:JakeZhang转发链接:https://juejin.im/post/5ef8377f6fb9a07e693a6061目录...
- 2024前端面试真题之—VUE篇_前端面试题vue2020及答案
-
添加图片注释,不超过140字(可选)...
- 今年最常见的前端面试题,你会做几道?
-
在面试或招聘前端开发人员时,期望、现实和需求之间总是存在着巨大差距。面试其实是一个交流想法的地方,挑战人们的思考方式,并客观地分析给定的问题。可以通过面试了解人们如何做出决策,了解一个人对技术和解决问...
- 一周热门
- 最近发表
-
- oracle数据导入导出_oracle数据导入导出工具
- 继续学习Python中的while true/break语句
- python continue和break的区别_python中break语句和continue语句的区别
- 简单学Python——关键字6——break和continue
- 2-1,0基础学Python之 break退出循环、 continue继续循环 多重循
- Python 中 break 和 continue 傻傻分不清
- python中的流程控制语句:continue、break 和 return使用方法
- L017:continue和break - 教程文案
- 作为前端开发者,你都经历过怎样的面试?
- 面试被问 const 是否不可变?这样回答才显功底
- 标签列表
-
- git pull (33)
- git fetch (35)
- mysql insert (35)
- mysql distinct (37)
- concat_ws (36)
- java continue (36)
- jenkins官网 (37)
- mysql 子查询 (37)
- python元组 (33)
- mybatis 分页 (35)
- vba split (37)
- redis watch (34)
- python list sort (37)
- nvarchar2 (34)
- mysql not null (36)
- hmset (35)
- python telnet (35)
- python readlines() 方法 (36)
- munmap (35)
- docker network create (35)
- redis 集合 (37)
- python sftp (37)
- setpriority (34)
- c语言 switch (34)
- git commit (34)
