当前位置: 首页 > news >正文

C# 图解教程 第5版 —— 第13章 数组

文章目录

    • 13.1 数组
      • 13.1.1 定义
      • 13.1.2 重要细节
    • 13.2 数组的类型
    • 13.3 数组是对象
    • 13.4 一维数组和矩形数组
    • 13.5 实例化一维数组或矩形数组
    • 13.6 访问数组元素(*)
    • 13.7 初始化数组
      • 13.7.1 显示初始化一维数组
      • 13.7.2 显示初始化矩形数组
      • 13.7.3 初始化矩形数组的语法点(*)
      • 13.7.4 快捷语法
      • 13.7.5 隐式类型数组
      • 13.7.6 综合内容(*)
    • 13.8 交错数组
      • 13.8.1 声明交错数组
      • 13.8.2 快捷实例化
      • 13.8.3 实例化交错数组
      • 13.8.4 交错数组中的子数组(*)
    • 13.9 比较矩形数组和交错数组
    • 13.10 foreach 语句
      • 13.10.1 迭代变量是只读的
      • 13.10.2 foreach 语句和多维数组
    • 13.11 数组协变
    • 13.12 数组继承的有用成员
    • 13.13 比较数组类型
    • 13.14 数组与 ref 返回和 ref 局部变量

13.1 数组

13.1.1 定义

  • 元素:数组的独立数据项。
  • 秩/维度:数组的维度数称作秩。
  • 维度长度:每个维度方向的位置个数。
  • 数组长度:所有维度中的元素总数。

13.1.2 重要细节

  • 数组一旦创建就固定了。C# 不支持动态数组。
  • 数组索引号从 0 开始。

13.2 数组的类型

​ C# 提供以下两种类型的数组:

  1. 一维数组。

  2. 多维数组。

    • 矩形数组。

      • 某个维度的所有子数组长度相同。
      • 仅使用一组方括号表示。
    • 交错数组。

      • 每个子数组都是独立的。
      • 可以有不同长度的子数组。
      • 每一个维度使用一个方括号表示。
image-20231028233858258
图13.1 一维数组、矩形数组及交错数组

13.3 数组是对象

​ 数组是继承了 System.Array 类型的对象,具有 BCL 基类中很多有用的成员:

  • Rank:属性,返回数组的维度。
  • Length:属性,返回数组的长度。
image-20231028234121805
图13.2 数组的结构

13.4 一维数组和矩形数组

声明一维数组或多维数组

​ 在类型和变量名称之间使用方括号声明数组,方括号内的逗号是秩说明符,指定了数组的维度数:秩 = 逗号数 + 1。

  • 可以有任意多个秩说明符(逗号)。
  • 不能在数组类型区域中放数组维度长度(维度长度不是类型的一部分)。
  • 数组声明后,维度就固定了。而维度长度直到数组实例化时才决定。
image-20231028234602373
图13.3 数组的声明

13.5 实例化一维数组或矩形数组

​ 使用 new 运算符实例化:

image-20231028235251526 image-20231028235303201 image-20231028235316531
图13.4 声明和实例化数组

13.6 访问数组元素(*)

13.7 初始化数组

​ 数组被创建后,每个元素被自动初始化为类型的默认值。

  • 整型:0。
  • 浮点型:0.0。
  • 布尔型:false。
  • 引用类型:null。

13.7.1 显示初始化一维数组

​ 使用初始化列表进行初始化:

  • 初始值以逗号分隔,封闭在大括号内。
  • 不必输入维度长度,编译器可以进行推断。
image-20231028235950901
图13.5 一维数组的显示初始化

13.7.2 显示初始化矩形数组

  • 每个初始值向量必须封闭在大括号内。
  • 每个维度必须嵌套并封闭在大括号内。
  • 每个维度的初始化列表和组成部分也使用逗号分隔。
image-20231029000205626
图13.6 初始化矩形数组

13.7.3 初始化矩形数组的语法点(*)

13.7.4 快捷语法

​ 可以省略语法的数组创建表达式部分,只提供初始化部分:

image-20231029000836345
图13.7 声明、创建以及初始化数组的快捷语法

13.7.5 隐式类型数组

​ 由于智能的编译器,可以使用 var 关键字进一步简化声明隐式数组:

image-20231029001138210
图13.8 使用 var 声明隐式类型数组

13.7.6 综合内容(*)

13.8 交错数组

13.8.1 声明交错数组

  • 和矩形数组一样,数组类型声明部分不能包含维度长度。
image-20231029001527294
图13.9 声明交错数组

13.8.2 快捷实例化

​ 可以快捷创建顶层数组的声明:

image-20231029001753063 image-20231029001807546 image-20231029001819337
图13.10 快捷最高级别实例化

13.8.3 实例化交错数组

​ 交错数组的初始化不能在一个步骤中完成,需要以下步骤:

  1. 实例化顶层数组。
  2. 分别实例化每一个子数组。
image-20231029002021158
图13.11 创建二维交错数组

13.8.4 交错数组中的子数组(*)

13.9 比较矩形数组和交错数组

​ 图 13.12 展示了保存 9 个整数的矩形数组和交错数组。矩形数组只有单个数组对象,而交错数组有 4 个数组对象。

image-20231029234022522
图13.12 比较矩形数组和交错数组的结构

​ CIL 中,一维数组有特定的性能优化指令,而矩形数组没有。因此,有时使用一维数组的交错数组比矩形数组更高效。

13.10 foreach 语句

13.10.1 迭代变量是只读的

  • 对于值类型数组,不能改变数组元素。
  • 对于引用类型数组,不能改变引用,可以通过迭代变量改变数据。

13.10.2 foreach 语句和多维数组

  1. 矩形数组

    维度处理次序为从右向左,每个维度从 0 开始递增。递增满时,重置为 0,左方维度索引递增。

  2. 交错数组

    必须为每一个维度使用独立的 foreach 语句。

13.11 数组协变

​ **数组协变:**即使某个对象不是数组的基类型,也可以把它赋值给数组元素。发生的条件如下:

  • 为引用类型数组。
  • 在复制对象和数组基类型之间有隐式或显示转换。
image-20231029235139038 image-20231029235212543 image-20231029235229032
图13.13 数组出现协变

13.12 数组继承的有用成员

表13.1 数组继承的一些有用成员
image-20231029235310161

13.13 比较数组类型

表13.2 比较数组类型的总结
image-20231029235426636

13.14 数组与 ref 返回和 ref 局部变量

image-20231029235615041
图13.14 数组 ref 返回与局部变量示例

相关文章:

C# 图解教程 第5版 —— 第13章 数组

文章目录 13.1 数组13.1.1 定义13.1.2 重要细节 13.2 数组的类型13.3 数组是对象13.4 一维数组和矩形数组13.5 实例化一维数组或矩形数组13.6 访问数组元素(*)13.7 初始化数组13.7.1 显示初始化一维数组13.7.2 显示初始化矩形数组13.7.3 初始化矩形数组的…...

android studio启动Task配置

Android studio 高版本默认不开启Task配置,需要自己手动开启 1.低版本配置路径:(复制他人图片) 2.高版本路径:添加下图勾选配置即可 3.gradle task 3.1 初识task gradle中所有的构建工作都是由task完成的,它帮我们处…...

Xcode运行程序提示 Executable Path is a Directory 问题解决

一、首先运行模拟器报错(没有记录),解决办法: TARGET->Build Settings->Architectures -> Exclude Architectures里面填入arm64,后运行模拟器成功 二、其次模拟器开发完成后,xcode运行真机调试&…...

决策树的优缺点

决策树优点 1. 易于理解和解释,因为树木可以画出来被看见 2. 需要很少的数据准备。其他很多算法通常都需要数据规范化,需要创建虚拟变量并删除空值等。但请注意, sklearn中的决策树模块不支持对缺失值的处理。 3. 使用树的成本(比…...

Flask后端开发(二) - 功能实现和项目总结

目录 1. 功能1:修改文件参数值1.1. 获取网页端传参1.2. 读取文件1.2.1. 一般文件读取方式1.2.2. 特殊文件 —— mlx文件1.2.3. 特殊文件 —— .xlx文件1.3. 查找数据修改位置,替换数据2. 功能2:读取结果数据2.1. 实时数据展示如何存储相关数据?2.2. 读取相关数据,整理、打…...

思维训练第五课插入语和主谓一致

系列文章目录 文章目录 系列文章目录前言一、插入语插入语的分类1、常用作插入语的副词 Indeed的确 certainly 当然 surely 无疑地 however 然而 等2、形容词及词组作插入语3、常作插入语的介词短语4、常作插入语的分词短语 Strictly speaking严格地说,generally sp…...

开源利器:it-tools 项目介绍

作为一名开发人员,我们在日常工作和学习中常常需要使用一系列小工具,如JSON格式化、JSON转表格、当前时间戳、XML格式化、SQL格式化、密码生成以及UUID生成等。通常情况下,我们会在网上搜索各种在线工具来满足这些需求。然而,这些…...

基于和声算法的无人机航迹规划-附代码

基于和声算法的无人机航迹规划 文章目录 基于和声算法的无人机航迹规划1.和声搜索算法2.无人机飞行环境建模3.无人机航迹规划建模4.实验结果4.1地图创建4.2 航迹规划 5.参考文献6.Matlab代码 摘要:本文主要介绍利用和声算法来优化无人机航迹规划。 1.和声搜索算法 …...

[Linux]线程池

[Linux]线程池 文章目录 [Linux]线程池线程池的概念线程池的优点线程池的应用场景线程池的实现 线程池的概念 线程池是一种线程使用模式。线程池是一种特殊的生产消费模型,用户作为生产者,线程池作为消费者和缓冲区。 线程过多会带来调度开销&#xff0c…...

使用es实现轻量级分布式锁

文章目录 [toc] 1.前言2.实现3.总结 1.前言 一般来说,实现分布式锁的方式有哪几种? 一:Redisson实现 二:ZK实现 这两种实现网上的实现是千篇一律,在本文就不做过多的讲解了 其它方式好像没有了,真的是这…...

富文本编辑器特殊字符的解码编码

var HtmlUtil {/*1.用浏览器内部转换器实现html转码*/htmlEncode:function (html){//1.首先动态创建一个容器标签元素,如DIVvar temp document.createElement ("div");//2.然后将要转换的字符串设置为这个元素的innerText(ie支持)或者textContent(火狐&…...

几种软件开发方法对比

几种软件开发方法对比 1 综述 软件开发方法是一种使用早已定义好的技术集及符号表示习惯来组织软件生产的过程。 本文对净室方法、结构化方法、面向对象方法、原型法、逆向工程等方法进行梳理,并对各种开发方法特点、优点进行对比。 2 净室方法 2.1 特点 净…...

在Maven中发布项目到Nexus私有服务器

一、测试环境 Sonatype Nexus 3.61.0-02 Maven 3.9.2 二、环境配置 2.1找到maven的配置文件 2.2添加私有仓库账户密码 <servers><server><id>nexus</id><username>admin</username><password>admin</password></server&…...

TypeScript - 类 -类的继承

浅谈类的继承 类的继承 就是对一个类进行扩展&#xff0c;可以扩展属性、方法。 类的继承 可以很好的解决代码冗余的问题。比如 &#xff1a; 【学生】类 拥有 基本的 姓名、年龄 两个属性&#xff0c; 【体育生】类也属于【学生】类&#xff0c;有 姓名、年龄、训练项目 三个…...

QT: QLineEdit 密码模式、QLineEdit输入模式

setEchoMode(QLineEdit::Normal) 是一个函数&#xff0c;用于设置 QLineEdit 对象的输入模式。具体用法如下&#xff1a; lineEdit->setEchoMode(QLineEdit::Normal);该函数的作用是将 QLineEdit 对象的输入模式设置为“正常模式”&#xff0c;在此模式下&#xff0c;用户的…...

ES6中Map集合

Map集合是一个新的数据结构&#xff0c;它可以存储键值对&#xff0c;并且可以使用任何类型的值作为键&#xff0c;包括对象、数组和函数。Map也是一种可迭代的结构&#xff0c;可以使用for...of循环遍历。 在ES6中&#xff0c;我们可以使用Map构造函数来创建一个Map集合&…...

【Leetcode Sheet】Weekly Practice 13

Leetcode Test 1155 掷骰子等于目标和的方法数(10.24) 这里有 n 个一样的骰子&#xff0c;每个骰子上都有 k 个面&#xff0c;分别标号为 1 到 k 。 给定三个整数 n , k 和 target &#xff0c;返回可能的方式(从总共 kn 种方式中)滚动骰子的数量&#xff0c;使正面朝上的数…...

技术贴 | 一文掌握 Google Test 框架

一、简介 1. 引言 在开发过程中&#xff0c;如何保证代码的质量以及程序的正确性成为了我们亟需解决的问题&#xff0c;其中测试用例成为了不必可少的一部分。测试用例不仅可以帮助我们验证代码的正确性&#xff0c;还能帮助我们捕获潜在的错误&#xff0c;提高代码的可靠性和…...

基于深度学习的中文情感分类 - 卷积神经网络 情感分类 情感分析 情感识别 评论情感分类 计算机竞赛

文章目录 1 前言2 情感文本分类2.1 参考论文2.2 输入层2.3 第一层卷积层&#xff1a;2.4 池化层&#xff1a;2.5 全连接softmax层&#xff1a;2.6 训练方案 3 实现3.1 sentence部分3.2 filters部分3.3 featuremaps部分3.4 1max部分3.5 concat1max部分3.6 关键代码 4 实现效果4.…...

非线性时滞系统的无模型预测控制

摘 要 非线性时滞系统的预测控制应用广泛&#xff0c;比如电子设备、石油化工、造纸等行业&#xff0c;都会运用到非线性时滞系统的预测控制系统或工具。更高效率和更高精度的非线性时滞系统的预测控制一直是研究的热点。在我们日常生活中&#xff0c;非线性时滞系统的预测控制…...

告别环境冲突!在PyCharm里用Anaconda为ArcGIS 10.2创建专属Arcpy虚拟环境(附32/64位切换指南)

告别环境冲突&#xff01;在PyCharm里用Anaconda为ArcGIS 10.2创建专属Arcpy虚拟环境&#xff08;附32/64位切换指南&#xff09; 当你在处理多个GIS项目时&#xff0c;是否经常遇到这样的困扰&#xff1a;一个项目需要ArcGIS 10.2的32位环境&#xff0c;另一个项目却需要64位…...

新手零基础入门:用快马一键生成交互式python学习jupyter notebook

作为一个刚开始学Python的小白&#xff0c;最近发现用Jupyter Notebook来练习代码特别方便。特别是列表和字典这些基础数据结构&#xff0c;通过交互式单元格可以边学边改&#xff0c;效果比单纯看教程好多了。今天就用InsCode(快马)平台来演示如何快速生成一个适合新手的交互式…...

SAP BAPI实战指南:核心模块高频接口速查与应用解析

1. SAP BAPI入门&#xff1a;为什么开发者需要这份速查手册 第一次接触SAP BAPI时&#xff0c;我盯着满屏的接口文档差点崩溃——光是FICO模块就有二十多个常用BAPI&#xff0c;每个接口的参数列表长得像毕业论文。后来在项目上踩过几次坑才明白&#xff0c;BAPI的难点不在于技…...

GPEN技术白皮书精读:生成先验如何解决人脸超分病态逆问题

GPEN技术白皮书精读&#xff1a;生成先验如何解决人脸超分病态逆问题 1. 引言&#xff1a;从模糊到高清的AI魔法 你有没有遇到过这样的情况&#xff1f;翻看老照片时&#xff0c;发现那些珍贵的面孔已经模糊不清&#xff1b;或者用AI生成图片时&#xff0c;人脸总是出现奇怪的…...

3个高效步骤掌握B站视频下载工具:从解析到批量管理的完整方案

3个高效步骤掌握B站视频下载工具&#xff1a;从解析到批量管理的完整方案 【免费下载链接】bilidown 哔哩哔哩视频解析下载工具&#xff0c;支持 8K 视频、Hi-Res 音频、杜比视界下载、批量解析&#xff0c;可扫码登录&#xff0c;常驻托盘。 项目地址: https://gitcode.com/…...

ai辅助c++开发:让快马成为你的codeblocks智能编程助手与算法导师

AI辅助C开发&#xff1a;让快马成为你的CodeBlocks智能编程助手与算法导师 最近在用CodeBlocks开发一个C图形化应用时&#xff0c;遇到了一个典型问题&#xff1a;需要实现非递归快速排序算法并测试性能。传统开发方式可能需要反复查阅文档、调试代码&#xff0c;但借助InsCod…...

广告防欺诈与广告验证:住宅代理如何帮助监测点击欺诈

广告欺诈正在持续侵蚀企业的广告预算&#xff0c;并导致数据分析结果失真。常见形式包括点击欺诈、虚假流量以及域名伪造&#xff0c;这些问题使广告主难以准确评估真实投放效果。在实际业务中&#xff0c;如何获取“接近真实用户视角”的广告数据&#xff0c;成为广告验证的关…...

如何在3天内快速掌握音频驱动面部动画技术?完整实战指南 [特殊字符]

如何在3天内快速掌握音频驱动面部动画技术&#xff1f;完整实战指南 &#x1f680; 【免费下载链接】FACEGOOD-Audio2Face http://www.facegood.cc 项目地址: https://gitcode.com/gh_mirrors/fa/FACEGOOD-Audio2Face 想要让虚拟角色拥有逼真的面部表情吗&#xff1f;FA…...

小红书内容采集效率革命:XHS-Downloader全方位解决方案

小红书内容采集效率革命&#xff1a;XHS-Downloader全方位解决方案 【免费下载链接】XHS-Downloader 小红书&#xff08;XiaoHongShu、RedNote&#xff09;链接提取/作品采集工具&#xff1a;提取账号发布、收藏、点赞、专辑作品链接&#xff1b;提取搜索结果作品、用户链接&am…...

如何在单台电脑上实现4人同屏游戏?Nucleus Co-Op开源项目详解

如何在单台电脑上实现4人同屏游戏&#xff1f;Nucleus Co-Op开源项目详解 【免费下载链接】nucleuscoop Starts multiple instances of a game for split-screen multiplayer gaming! 项目地址: https://gitcode.com/gh_mirrors/nu/nucleuscoop 你是否曾想过&#xff0c…...