C#入门及进阶|数组和集合(二):数组的初始化及元素访问

 目录

1.数组的初始化

1. 1 一维数组初始化

1.2多维数组初始化

1.3 不规则数组初始化

2.数组的访问

2.1 一维数组的引用

2.2 多维数组的引用

2.3 不规则数组的引用


1.数组的初始化

1. 1 一维数组初始化

        语法形式1

type [ ] arrayName = new type [size] { val1, val2, ……,valn };

        数组声明与初始化同时进行时,size也就是数组元素的个数必须是常量,而且应该与大括号内的数据个数一致。

        语法形式2:

type [ ] arrayName = new type [ ] { val1, val2, ……,valn };

        省略size,由编译系统根据初始化表中的数据个数,自动计算数组的大小。

        语法形式3:

type [ ] arrayName = { val1, val2, ……,valn };

         数组声明与初始化同时进行,还可以省略new运算符。

        语法形式4:

type [ ] arrayName ;
arrayName = new type [size] { val1, val2, ……,valn };

        例如: 以下4种数组初始化实例都是等同的。

int [ ] nums = new int [10] {0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
int [ ] nums = new int [ ] {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
int [ ] nums = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
int [ ] nums ;nums = new int [10] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };

1.2多维数组初始化

        多维数组初始化是通过将对每维数组元素设置的初始值放在各自的一个大花括号内完成,以最常用的二维数组为例来讨论。

语法形式1

type [ , ] arrayName = new type [size1, size2 ] {{ val11, val12, ……,val1n },{ val21, val22, ……,val2n }, …… { valm1, valm2, ……,valmn }};

        数组声明与初始化同时进行,数组元素的个数是size1*size2,数组的每一行分别用一个花括号括起来,每个花括号内的数据就是这行的每一列元素的值,初始化时的赋值顺序按矩阵的“行”存储原则。

        语法形式2:

type [ ,] arrayName = new type [ , ] {{ val11, val12, ……,val1n },{ val21, val22, ……,val2n }, …… { valm1, valm2, ……,valmn }};

        省略size,由编译系统根据初始化表中花括号{}的个数确定行数,再根据{}内的数据确定列数,从而得出数组的大小。

        语法形式3:

type [ , ] arrayName ={{ val11, val12, ……,val1n },{ val21, val22, ……,val2n }, …… { valm1, valm2, ……,valmn }};

        数组声明与初始化同时进行,还可以省略new运算符。

        语法形式4:

type [ , ] arrayName ;
arrayName = new type [size1, size2] {{ val11, val12, ……,val1n },{ val21, val22, ……,val2n }, …… { valm1, valm2, ……,valmn }};

        例如:以下数组初始化实例都是等同的。

int [, ] a = new int [3,4] {{0, 1, 2, 3}, {4, 5, 6, 7}, {8, 9, 10, 11} };
int [, ] a = new int [, ] {{0, 1, 2, 3}, {4, 5, 6, 7}, {8, 9, 10, 11} };
int [, ] a = {{0, 1, 2, 3}, {4, 5, 6, 7}, {8, 9, 10, 11} };
int [,] a ;a = new int [3, 4] {{0, 1, 2, 3}, {4, 5, 6, 7}, {8, 9, 10, 11} };

1.3 不规则数组初始化

        不规则数组是一个数组的数组,所以它的初始化通常是分步骤进行的。

type [ ][ ] arrayName = new type [size] [ ];

        size可以是常量或变量,后面一个中括号[ ]内是空着的,表示数组的元素还是数组且这每一个数组的长度是不一样,需要单独再用new运算符生成。

arrayName[0] = new type [size0] { val1, val2, ……, valn1};
arrayName[1] = new type [size1] { val1, val2, ……, valn2};…………

        不规则数组初始化实例:

char [ ] [ ] st1 = new char [3][ ];  
// st1是由三个数组组成的数组
st1[0] = new char [ ] {‘S’, ’e’, ’p’, ’t’, ’e’, ’m’, ’b’, ’e’, ’r’ };
st1[1] = new char [ ] {‘O’, ’c’, ’t’, ’o’, ’b’, ’e’, ’r’};
st1[2] = new char [ ] {‘N’, ’o’, ’v’, ’e’, ’m’, ’b’, ’e’, ’r’ };

        【数组声明应用举例】

        下面是一个完整的C#程序,它声明并实例化上面所讨论的数组。

// arrays.cs
using System;
class DeclareArraysSample
{public static void Main(){int[] numbers = new int[5]; // 一维数组string[,] names = new string[5,4]; // 二维数组byte[][] scores = new byte[5][]; // 数组的数组for (int i = 0; i < scores.Length; i++){scores[i] = new byte[i+3];}// 在每行输出数组的长度for (int i = 0; i < scores.Length; i++){Console.WriteLine("Length of row {0} is {1}", i, scores[i].Length);}}
}

        【输出】

Length of row 0 is 3
Length of row 1 is 4
Length of row 2 is 5
Length of row 3 is 6
Length of row 4 is 7

2.数组的访问

2.1 一维数组的引用

        一维数组的引用语法形式:数组名[下标]

       下标――数组元素的索引值,实际上就是要访问的那个数组元素在内存中的相对位移,记住相对位移是从0开始的,所以下标的值从0到数组元素的个数-1为止。

        【例】定义一个数组,存放一组数据,找出这组数中最大数和最小数。

        例如:数据分别是{89, 78, 65, 52, 90, 92, 73, 85, 91, 95}。

static void Main(string[] args)
{int max, min;int[] queue = new int[10] { 89, 78, 65, 52, 90, 92, 73, 85, 91, 95 };max = min = queue[0];for (int i = 1; i < 10; i++){if (queue[i] > max) max = queue[i];if (queue[i] < min) min = queue[i];}Console.WriteLine("最大数是{0},最小数是{1}", max, min);Console.Read();
}

2.2 多维数组的引用

        多维数组的引用语法形式:数组名[下标1, 下标2, …下标n]

        【例】求两个矩阵的乘积。假定一个矩阵A为3行4列,另一个矩阵B为4行3列,根据矩阵乘法的规则,其乘积C为一个3行3列的矩阵。

static void Main(string[] args)
{int i, j, k;int[,] a = new int[3, 4] { { 1, 2, 3, 4 }, { 5, 6, 7, 8 }, { 9, 10, 11, 12 } };int[,] b = new int[4, 3] { { 12, 11, 10 }, { 9, 8, 7 }, { 6, 5, 4 }, { 3, 2, 1 } };int[,] c = new int[3, 3];//两个矩阵相乘for (i = 0; i < 3; i++)for (j = 0; j < 3; j++)for (k = 0; k < 4; ++k)c[i, j] += a[i, k] * b[k, j];
for (i = 0; i < 3; ++i){for (j = 0; j < 3; ++j)Console.Write("{0, 4:d}", c[i, j]);Console.WriteLine();}Console.Read();
}

2.3 不规则数组的引用

       语法形式:数组名[下标1][下标2]……[下标n]  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/670536.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue3——模板语法(文本插值、vue内置指令)

文章目录 文本插值{{}}受限的全局访问指令Directives指令的参数指令的修饰符vue3的内置指令渲染文本内容&#xff08;v-text&#xff09;渲染html &#xff08;v-html&#xff09;单项绑定&#xff08;v-bind&#xff09;单项绑定的使用单项绑定v-bind的简写同名简写动态绑定多…

机器学习 | 探索朴素贝叶斯算法的应用

朴素贝叶斯算法是一种基于贝叶斯定理和特征条件独立假设的分类算法。它被广泛应用于文本分类、垃圾邮件过滤、情感分析等领域&#xff0c;并且在实际应用中表现出色。 朴素贝叶斯法是基于贝叶斯定理与特征条件独立假设的分类方法&#xff1a; 1&#xff09;对于给定的待分类项r…

达梦数据库主备切换知识

一、切换模式 达梦数据库主备切换分为主动切换和被动切换模式 primary:主库状态 standby:备库状态 suspend;挂起状态,数据库会变成只读模式 主库正常切换的前提: 1、监视器正常 2、接管备库是 Standby 模式、Open 状态。 二、监视器模式 MON_DW_CONFIRM为1时为确认监视…

Architecture Lab:Part C【流水线通用原理/Y86-64的流水线实现/实现IIADDQ指令】

目录 任务描述 知识回顾 流水线通用原理 Y86-64流水线实现&#xff08;PIPE-与PIPE&#xff09; 开始实验 IIADDQ指令的添加 优化 ncopy.ys 仅用第四章知识&#xff0c;CEP11.55 8x1展开&#xff0c;CPE9.35 8x1展开2x1展开消除气泡&#xff0c;CPE8.10 流水线化通过…

算法每日一题: 使用循环数组所有元素相等的最少秒数 | 哈希

大家好&#xff0c;我是星恒&#xff0c;今天给大家带来的是一道需要感觉规律的题目&#xff0c;只要读懂题目中的规律&#xff0c;就可以做出来了 这道题用到了哈希&#xff0c;还有一个关键点比较类似循环队列 题目&#xff1a;leetcode 2808 给你一个下标从 0 开始长度为 n…

C++ 值传递,引用传递,以及指针传递

值传递&#xff1a; 直接复制变量值给函数使用&#xff0c;函数内部不影响原变量。 引用传递&#xff1a; 不复制变量&#xff0c;而是提供对原变量的直接访问&#xff0c;函数内部操作可改变原变量值。 指针传递&#xff1a; 通过传递变量地址间接访问和操作变量&#xff0c;提…

Postman发送带登录信息的请求

环境&#xff1a;win10Postman10.17.7 假设有个请求是这样的&#xff1a; RequiresPermissions("tool:add") PostMapping(value"/predict") ResponseBody /** * xxx * param seqOrderJson json格式的参数 * return */ public String predictSampleIds(Req…

svg基础(三)分组、渐变

上一篇文章简单介绍了svg常用标签及其属性,本篇主要介绍分组&#xff0c;渐变 1 分组<g> 分组容器 添加到g元素上的变换会应用到其所有的子元素上添加到g元素的属性会被其所有的子元素继承定义复杂对象&#xff0c;可通过<use>元素引用 1.1 分组 <svg>&…

EasyExcel分页上传数据

EasyExcel分页上传数据 一、实例 controller上传入口 PostMapping("/upload")ResponseBodyLog(title "导入工单", businessType BusinessType.IMPORT)public AjaxResult uploadFile(HttpServletRequest request, MultipartFile files) throws Exceptio…

Node.js+Express+Mysql服务添加环境变量

1、使用dotenv插件 1&#xff09;安装插件&#xff1a;npm install dotenv-cli --save-dev 2&#xff09;在项目根目录下添加对应的 .env 配置文件&#xff1b; // .env配置文件内容 MODEdevelopment, BASE_URLhttp://127.0.0.1:80813) 在启动命令中设置对应的加载文件&#…

springboot159基于springboot框架开发的景区民宿预约系统的设计与实现

简介 【毕设源码推荐 javaweb 项目】基于springbootvue 的 适用于计算机类毕业设计&#xff0c;课程设计参考与学习用途。仅供学习参考&#xff0c; 不得用于商业或者非法用途&#xff0c;否则&#xff0c;一切后果请用户自负。 看运行截图看 第五章 第四章 获取资料方式 **项…

STM32内部Flash

目录 一、内部Flash简介 二、内部Flash构成 1. 主存储器 2. 系统存储区 3. 选项字节 三、内部Flash写入过程 1. 解锁 2. 页擦除 3. 写入数据 四、工程空间分布 某工程的ROM存储器分布映像&#xff1a; 1. 程序ROM的加载与执行空间 2. ROM空间分布表 一、内部Flash…

2024.3.28-29日ICVS-AI智能汽车产业峰会(杭州)

本次安策将携手泰雷兹一起&#xff0c;参展ICVS2024第四届AI智能汽车产业峰会(杭州)&#xff0c;2024年3月28日-29日&#xff0c;欢迎新老朋友参加和莅临27号展台交流。 随着自动驾驶汽车政策密集落地。从我国四部门联合发布《关于开展智能网联汽车准入和上路通行试点工作的通知…

【0256】揭晓pg内核中MyBackendId的分配机制(后端进程Id,BackendId)(二)

上一篇:【0255】揭晓pg内核中MyBackendId的分配机制(后端进程Id,BackendId)(一) 文章目录 1. 前言2. 分配BackendId2.1 何时为backend process分配BackendId2.1.1 找出未使用的slot(inactive slot)2.3 BackendId序号从多少开始?2.4 后端进程退出后,其BackendId被释放…

【头歌·计组·自己动手画CPU】一、计算机数据表示(讲解版) 【计算机硬件系统设计】

&#x1f57a;作者&#xff1a; 主页 我的专栏C语言从0到1探秘C数据结构从0到1探秘Linux &#x1f618;欢迎关注&#xff1a;&#x1f44d;点赞&#x1f64c;收藏✍️留言 &#x1f3c7;码字不易&#xff0c;你的&#x1f44d;点赞&#x1f64c;收藏❤️关注对我真的很重要&…

五、Redis之发布订阅及事务管理

5.1 发布订阅 5.1.1 Redis 发布订阅 (pub/sub) 是一种消息通信模式&#xff1a;发送者 (pub) 发送消息&#xff0c;订阅者 (sub) 接收消息。Redis 客户端可以订阅任意数量的频道。下图展示了频道 channel1 &#xff0c;以及订阅这个频道的三个客户端 —— client1 、client2 …

力扣题目-1633.各赛事的用户注册率

力扣题目-1633.各赛事的用户注册率 仅作学习&#xff0c;不作他用 题干 用户表&#xff1a; Users Column NameTypeuser_namevarcharuser_idint user_id 是该表的主键(具有唯一值的列)。 该表中的每行包括用户 ID 和用户名。 注册表&#xff1a; Register Column NameTy…

C入门番外篇——C, Are you OK?

今日路上看到一个车牌&#xff0c;52U0K&#xff0c;感觉很有意思&#xff0c;如果做一下简单的翻译就是&#xff0c;“我爱你&#xff0c;好么&#xff1f;” 这样让我脑子中闪现了这样的一个画面&#xff1a;“一个男生追一个女生&#xff0c;看到女生不怎么搭理自己的样子&a…

Spring核心基础:全面总结Spring中提供的那些基础工具类!

内容概要 Spring Framework 提供了众多实用的工具类&#xff0c;这些工具类在简化开发流程、提升代码质量和维护性方面发挥了重要作用&#xff0c;以下是部分关键工具类的总结及其使用场景&#xff1a; StringUtils&#xff1a;不仅提供了基础的字符串操作&#xff0c;如拼接…

转融通业务是什么?好处和弊端是什么?

转融通业务是指证券金融公司借入证券、筹得资金后&#xff0c;再转借给证券公司&#xff0c;为证券公司开展融资融券业务提供资金和证券来源&#xff0c;包括转融券业务和转融资业务两部分。从证券金融公司角度看&#xff0c;向证券公司提供资金和证券供其开展融资融券业务&…