C# 数组

C# 数组

  • 数组
    • 简单数组
    • 多维数组
    • 锯齿数组
    • Array类
    • 数组的接口
    • 枚举

数组

如果需要使用同一类型的多个对象,就可以使用集合和数组。C#用特殊的记号声明和使用数组。

简单数组

在声明数组时,应先定义数组中元素的类型,其后是一个空方括号和一个变量名。
int[] myArray;
myArray = new int[5];
或者
int[] myArray = new int[5];

声明数组并赋初始值
int[] myArray = new int[5]{1, 2, 3, 4,5};
不指定数组大小,编译器自动计算数组长度
int[] myArray = new int[]{1, 2,3,4,5,6,7,8,9,0};

访问数组
int v1 = myArray[0];
int v2 = myArray[2];
myArray[3] = 100;

for (int i =0; i>myArray.Length; i++)
{
Console.WriteLine(myArray[i]);
}

for( int val in myArray)
{
Console.WriteLine(val);
}

多维数组

一般数组(也称为一维数组)用一个整数来索引。多维数组用两个或多个整数来索引。
在 C#中声明这个二维数组,需要在括号中加上一个逗号。数组在初始化时应指定每一维的大小
(也称为阶)。接着,就可以使用两个整数作为索引器,来访问数组中的元素了
int[,] towdim = new int[3,3]; // 声明3x3数组
twodim[0,0] = 1;
twodim[0,1] = 2;
twodim[0,2] = 3;
twodim[1,0] = 4;
twodim[1,1] = 5;
twodim[1,2] = 6;
twodim[2,0] = 7;
twodim[2,1] = 8;
twodim[2,2] = 9;
数组声明之后,就不能修改其阶数了。

数组声明时赋初值:
int[,] twodim = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9},
};

锯齿数组

二维数组的大小是矩形的,例如 3×3 个元素。而锯齿数组的大小设置是比较灵活的,在锯齿数组
中,每一行都可以有不同的大小。在声明锯齿数组时,要依次放置开闭括号。在初始化锯齿数组时,先设置该数组包含的行数。定义各行中元素个数的第二个括号设置为空,因为这类数组的每一行包含不同的元素数。之后,为每一行指定行中的元素个数:
int[][] jagged = new int[3][];
jagged[0] = new int[2] {1, 2};
jagged[1] = new int[6] {3, 4, 5, 6, 7, 8};
jagged[2] = new int[3] {9, 10, 11};

Array类

用括号声明数组是 C#中使用 Array 类的记号。在后台使用 C#语法,会创建一个派生于抽象基类
Array 的新类。这样,就可以使用 Array 类为每个 C#数组定义的方法和属性了。
在这里插入图片描述
Array 类是一个抽象类,所以不能使用构造函数来创建数组。但除了可以使用 C#语法创建数组实
例之外,还可以使用静态方法 CreateInstance()创建数组。如果事先不知道元素的类型,就可以使用该静态方法,因为类型可以作为 Type 对象传送给 CreateInstance()方法,可以用 SetValue()方法设置值,用 GetValue()方法读取值。

Array intArray = Array.CreateInstance(typeof(int), 5);
for (int i=0; i<5; i++)
{intArray.SetValue(10, i);
}
for (int i=0; i<5; i++)
{Console.WriteLine(intArray.GetValue(i));
}

将已创建的数组强制转换成声明为 int[]的数组:
int[] intArray2 = (int[])intArray1;

数组的接口

Array 类实现了 IEumerable、ICollection 和 IList 接口,以访问和枚举数组中的元素。由于用定制
数组创建的类派生于 Array 抽象类,所以能使用通过数组变量执行的接口中的方法和属性。

  • IEumerable 接口
    IEumerable 是由 foreach 语句用于迭代数组的接口。这是一个非常特殊的特性。

  • ICollection 接口
    ICollection 接口派生于 IEumerable 接口,并添加了如表 5-2 所示的属性和方法。这个接口主要用
    于确定集合中的元素个数,或用于同步。
    在这里插入图片描述

  • IList 接口
    IList 接口派生于 ICollection 接口,并添加了下面的属性和方法。Array 类实现 IList 接口的主要原因是,IList 接口定义了 Item 属性,以使用索引器访问元素。IList 接口的许多其他成员是通过Array类抛出 NotSupportedException 异常实现的,因为这些不应用于数组。
    在这里插入图片描述

枚举

在 foreach 语句中使用枚举,可以迭代集合中的元素,且无需知道集合中的元素个数。图 5-7 显示了调用 foreach 方法的客户机和集合之间的关系。数组或集合执行带 GetEumerator()方法的IEumerable 接口。GetEumerator()方法返回一个执行 IEumerable 接口的枚举。接着,foreach 语句就可以使用 IEumerable 接口迭代集合了。

  • IEnumerator 接口
    在这里插入图片描述
  • foreach 语句
foreach(Person p in persons)
{Console.WriteLine(p);
}
IEnumerator enumerator = persons.GetEnumerator();
while(enumerator.MoveNext())
{Person p = (Person)enumerrator.Current;Console.WriteLine(p);
}
  • yield 语句
    yield return 语句返回集合的一个元素,并移动到下一个元素上。yield break 可停止迭代。
using System;
using System.Collection;
namespace Wrox.ProCSharp.Arrays
{public class HelloCollection{public IEumeration GetEumerator(){yield return "Hello";yield return "World";}}
}
public class Program
{HelloCollection helloCollection = new HelloCollection();foreach(string s in helloCollection){Console.WriteLine(s);}
}

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

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

相关文章

Docker 自动化部署(保姆级教程)

Docker 自动化部署 1. jenkins 介绍1.1 参考链接&#xff1a;1.2 jenkins 概述1.3 jenkins部署项目的流程 2. jenkins 安装2.1 基于docker 镜像2.2 启动 jenkins 后端服务2.3 登录 jenkins 服务后端 3. jenkins自动化部署开始3.1 下载需要的插件3.2 创建任务3.2.1 描述3.2.2 配…

【图论C++】树的重心——教父POJ 3107(链式前向星的使用)

》》》算法竞赛 /*** file * author jUicE_g2R(qq:3406291309)————彬(bin-必应)* 一个某双流一大学通信与信息专业大二在读 * * brief 一直在竞赛算法学习的路上* * copyright 2023.9* COPYRIGHT 原创技术笔记&#xff1a;转载…

Neo4j-双向关系

概述 这是GraphAware中关于双向关系的解释。 网址链接Modelling Data in Neo4j: Bidirectional Relationships | GraphAware 定向关系 Neo4j中的关系必须有一个语义化的类型和方向。 没有方向关系是模棱两可的&#xff0c;上面A队打败B队&#xff0c;如果没有方向&#xff0c…

AOP 编程

目录 ​编辑一、AOP 编程 1、AOP 概念 2、AOP 编程的开发步骤 3、切面的名词解释 二、AOP 的底层实现原理 1、核心问题 2、动态代理类的创建 &#xff08;1&#xff09;JDK 的动态代理创建 &#xff08;2&#xff09;CGlib 的动态代理 &#xff08;3&#xff09;总结…

支持笔记本电脑直插直充,TOWE 65W智能快充PDU超级插座

电源插排在我们的生活中是必不可少的电器配件。今天&#xff0c;我们日常生活中所使用的电子设备越来越多&#xff0c;无论是手机、平板、笔记本电脑还是各种家用电器&#xff0c;都需要电源来驱动。虽然相对于其他电器来说&#xff0c;插排结构比较简单&#xff0c;但现代家庭…

设计模式5、原型模式 Prototype

解释说明&#xff1a;使用原型实例指定待创建对象的类型&#xff0c;并且通过复制这个原型阿里创建型的对象 UML 结构图&#xff1a; 抽象原型&#xff08;Prototype&#xff09;&#xff1a;规定了具体原型对象必须实现的clone()方法 具体原型&#xff08;ConcretePrototype&…

【我的创作纪念日】使用pix2pixgan实现barts2020数据集的处理(完整版本)

使用pix2pixgan &#xff08;pytorch)实现T1 -> T2的基本代码 使用 https://github.com/eriklindernoren/PyTorch-GAN/ 这里面的pix2pixgan代码进行实现。 进去之后我们需要重新处理数据集&#xff0c;并且源代码里面先训练的生成器&#xff0c;后训练鉴别器。 一般情况下…

计算机图像处理-均值滤波

均值滤波 线性滤波器的原始数据与滤波结果是一种算术运算&#xff0c;即用加减乘除等运算实现&#xff0c;如均值滤波器&#xff08;模板内像素灰度值的平均值&#xff09;、高斯滤波器&#xff08;高斯加权平均值&#xff09;等。由于线性滤波器是算术运算&#xff0c;有固定…

Android Jetpack Compose之确定重组范围并优化重组

1.概述 Compose的重组是智能的&#xff0c;Composable函数在进行重组时会尽可能的跳过不必要的重组&#xff0c;只对需要变化的UI进行重组。那Compose是如何认定UI需要变化呢&#xff1f;或者换句话说Compose是如何确定重组的范围呢。如果重组随意的发生&#xff0c;那么对UI的…

LabVIEW开发实时自动化多物镜云计算全玻片成像装置

LabVIEW开发实时自动化多物镜云计算全玻片成像装置 数字病理学领域正在迅速发展&#xff0c;这主要是由于计算机处理能力、数据传输速度、软件创新和云存储解决方案方面的技术进步。因此&#xff0c;病理科室不仅将数字成像用于图像存档等简单任务&#xff0c;还用于远程病理学…

一些 dp 题

CYEZ 弹珠 key&#xff1a;思维题&#xff0c;完全背包。 先每个组分一个小球。等价于 n − k n-k n−k 拆分为任意个 [ 1 , k ] [1,k] [1,k] 的数的方案数。 本质是根据面积的转换&#xff0c;直观解释&#xff1a; 完全背包即可。代码。 No Bug No Game key&#xff1…

无人直播间

失败&#xff01;&#xff01; 采用 ffmpeg 技术进行推流 推流代码&#xff1a; 【需要将rtmp替换为你的推流地址】 ffmpeg -re -stream_loop -1 -i "rain.mp4" -c copy -f flv ""推流地址获取 以哔哩哔哩为例 点击下方链接 开播设置 - 个人中心 - …

Java编程技巧:文件上传、下载、预览

目录 1、上传文件1.1、代码1.2、postman测试截图 2、下载resources目录中的模板文件2.1、项目结构2.2、代码2.3、使用场景 3、预览文件3.1、项目结构3.2、代码3.3、使用场景 1、上传文件 1.1、代码 PostMapping("/uploadFile") public String uploadFile(Multipart…

麒麟信安服务器操作系统V3.5.2重磅发布!

9月25日&#xff0c;麒麟信安基于openEuler 22.03 LTS SP1版本的商业发行版——麒麟信安服务器操作系统V3.5.2正式发布。 麒麟信安服务器操作系统V3定位于电力、金融、政务、能源、国防、工业等领域信息系统建设&#xff0c;以安全、稳定、高效为突破点&#xff0c;满足重要行…

试图一文彻底讲清 “精准测试”

在软件测试中&#xff0c;我们常常碰到两个基本问题&#xff08;困难&#xff09;&#xff1a; 很难保障无漏测&#xff1a;我们做了大量测试&#xff0c;但不清楚测得怎样&#xff0c;对软件上线后会不会出问题&#xff0c;没有信心&#xff1b; 选择待执行的测试用例&#…

阿里云七代云服务器实例、倚天云服务器及通用算力型和经济型实例规格介绍

在目前阿里云的云服务器产品中&#xff0c;既有五代六代实例规格&#xff0c;也有七代和八代倚天云服务器&#xff0c;同时还有通用算力型及经济型这些刚推出不久的新品云服务器实例&#xff0c;其中第五代实例规格目前不在是主推的实例规格了&#xff0c;现在主售的实例规格是…

MySQL架构 InnoDB存储引擎

1. 什么是Mysql&#xff1f; 我们在开发的时候&#xff0c;我们都需要对业务数据进行存储&#xff0c;这个时候&#xff0c;你们就会用到MySQL、Oracal等数据库。 MySQL它是一个关系型数据库&#xff0c;这种关系型数据库就有Oracal、 MySQL&#xff0c;以及最近很火的PgSQL等。…

Springcloud实战之自研分布式id生成器

一&#xff0c;背景 日常开发中&#xff0c;我们需要对系统中的各种数据使用 ID 唯一表示&#xff0c;比如用户 ID 对应且仅对应一个人&#xff0c;商品 ID 对应且仅对应一件商品&#xff0c;订单 ID 对应且仅对应 一个订单。我们现实生活中也有各种 ID &#xff0c;比如身…

分享78个Python源代码总有一个是你想要的

分享78个Python源代码总有一个是你想要的 源码下载链接&#xff1a;https://pan.baidu.com/s/1ZhXDsVuYsZpOUQIUjHU2ww?pwd8888 提取码&#xff1a;8888 下面是文件的名字。 12个python项目源码 Apache Superset数据探查与可视化平台v2.0.1 API Star工具箱v0.7.2 Archery…

Springcloud:二、Eureka介绍+上手(搭建EurekaServer注册中心+服务注册+服务拉取)

Eureka介绍 Eureka上手 搭建EurekaServer注册中心 在cloud-demo这个maven项目下创建eureka-server模块 引入依赖 在eureka-server模块的pom文件中新增如下代码 <dependencies><dependency><groupId>org.springframework.cloud</groupId><artif…