C# 数组

news2024/10/6 10:36:48

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.coloradmin.cn/o/1048841.html

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

相关文章

计算机毕业设计 基于SSM的垃圾分类管理系统(以医疗垃圾为例)的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

高性能MySQL第四版

主要列出与第三版的区别 第一章、MySQL架构 MySQL逻辑架构 左右分别是第三和第四版。 第四版架构图里把第二层的“查询缓存”去掉了&#xff0c;也去掉了对应的文字描述。 连接管理和安全 “每个 客户 端 连接 都会 在 服务器 进程 中 拥有 一个 线程” 第四版对这句话增…

英语——分享篇——每日100词——501-600

hill——will愿意——他不愿意去小山里 Easter——east东方(熟词)er儿(拼音)——东方的儿子都过复活节 exhibition——ex前夫(熟词)hi嗨(熟词)bition比神(谐音)——展览会上前夫很嗨&#xff0c;比神还开心 chase——vt.追捕&#xff0c;追逐&#xff0c;追赶——cha茶se色——…

国庆day1

消息队列 代码 发送 #include<myhead.h> //声明一个消息结构体 typedef struct {long msgtype; //消息类型char data[1024]; //消息正文 }Msg_s; #define SIZE sizeof(Msg_s)-sizeof(long) //消息正文的大小 int main(int argc, const char *argv[]) {key_t key; /…

HashMap底层源码,数据结构

HashMap的底层结构在jdk1.7中由数组链表实现&#xff0c;在jdk1.8中由数组链表红黑树实现&#xff0c;以数组链表的结构为例。 JDK1.8之前Put方法&#xff1a; JDK1.8之后Put方法&#xff1a; HashMap基于哈希表的Map接口实现&#xff0c;是以key-value存储形式存在&#xff0c…

lwip开发指南2

目录 NTP 协议实验NTP 简介NTP 实验硬件设计软件设计下载验证 lwIP 测试网速JPerf 网络测速工具JPerf 网络实验硬件设计软件设计下载验证 HTTP 服务器实验HTTP 协议简介HTTP 服务器实验硬件设计下载验证 网络摄像头&#xff08;ATK-MC5640&#xff09;实验ATK-MC5640 简介SCCB …

wait函数与waitpid函数

1.函数介绍 2.wait函数 #include <sys/types.h> #include <sys/wait.h> pid_t wait(int *wstatus); 功能&#xff1a;等待任意一个子进程结束&#xff0c;如果该子进程结束了&#xff0c;此函数会回收子进程的资源 参数&#xff1a; -int *wstatus&#xff1a;…

26602-2011 工业用2-吡咯烷酮 知识梳理

声明 本文是学习GB-T 26602-2011 工业用2-吡咯烷酮. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本标准规定了工业用2-吡咯烷酮的要求、试验方法、检验规则以及标志、包装、运输和贮存等。 本标准适用于γ-丁内酯和氨合成制得的2-吡咯烷酮…

MySQL Installer is running in Community mode

每天很准时的弹出&#xff1a; 这是由于检查MySql并且更新的一个定时任务&#xff0c;没有更新成功导致 解决办法&#xff1a;禁用定时任务 1.先关闭错误框 2.打开控制面板 &#xff0c;使用小图标查看 3. 打开管理工具&#xff0c;双击打开任务计划程序 4.双击进入&#xf…

【项目】基于C++11实现的数据库连接池

文章目录 前置知识关键技术点项目背景连接池功能点介绍MySQL Server参数介绍功能设计连接池功能点介绍开发平台选型关于MySQL数据库编程MySQL接口介绍测试表设计Connection设计数据库配置文件mysql.conf日志文件log.hppConnectionPool设计压力测试源码链接:前置知识 关键技术…

护眼灯什么价位的好?最具性价比的护眼台灯推荐

到了晚上光线比较弱&#xff0c;这时候就需要开灯&#xff0c;要是孩子需要近距离看字学习等等&#xff0c;给孩子选择的灯具要特别的重视。护眼灯就是目前颇受学生家长青睐的灯具之一&#xff0c;越来越多的人会购买一个护眼灯给自己的孩子让孩子能够在灯光下学习的时候&#…

「C++之STL」关于在模拟实现STL容器中的深浅拷贝问题

文章目录 前言杨辉三角深浅拷贝问题模拟实现的vector对题目杨辉三角引发的程序崩溃原因解决办法 前言 在学习STL容器中,不仅需要学会容器的使用,同时也需要了解容器的大体框架以及各个函数的模拟实现才能更好的去了解这个容器; 杨辉三角 在LeetCode中有一道这样的题目,给定一…

数据链路层 MTU 对 IP 协议的影响

在介绍主要内容之前&#xff0c;我们先来了解一下数据链路层中的"以太网" 。 “以太网”不是一种具体的网络&#xff0c;而是一种技术标准&#xff1b;既包含了数据链路层的内容&#xff0c;也包含了一些物理层的内容。 下面我们再来了解一下以太网数据帧&#xff…

Qt扫盲-QSqlRelationalTableModel 理论总结

QSqlRelationalTableModel 理论总结 一、概述二、使用概述三、常用 一、概述 QSqlRelationalTableModel的行为类似于QSqlTableModel&#xff0c;但允许将列设置为进入其他数据库表的外键。 二、使用概述 在上面左边的截图显示了 QTableView 中的普通 QSqlTableModel。外键(…

Unity如何生成随机数(设置种子)

文章目录 随机类整数二维向量三维向量种子其他文章 随机类 我们可以使用Random类来生成一些随机数 Random类是Unity提供的用于生成随机数的类之一。它可以用于生成不同类型的随机数&#xff0c;如整数、浮点数和向量。 整数 我们可以使用Random.Range来生成指定范围内的随机…

【Verilog 教程】6.5 Verilog避免Latch

关键词&#xff1a;触发器&#xff0c;锁存器 Latch 的含义 锁存器&#xff08;Latch&#xff09;&#xff0c;是电平触发的存储单元&#xff0c;数据存储的动作取决于输入时钟&#xff08;或者使能&#xff09;信号的电平值。仅当锁存器处于使能状态时&#xff0c;输出才会随着…

虹科Pico汽车示波器诚邀您加入精准诊断时代,助您成为修车大师!

虹科Pico汽车示波器的口号是&#xff1a; 面向未来诊断&#xff0c;定义精准时代 淘汰人的是工具从来不是年龄&#xff01;虹科Pico汽车示波器能够让您掌握现代的诊断工具&#xff0c;让您更高效的诊断故障原因。 我们有专业的设备与优质的技术服务&#xff01;让每个用户自…

卷麻了,00后测试用例写的比我还好,简直无地自容。。。

前言 作为一个测试新人&#xff0c;刚开始接触测试&#xff0c;对于怎么写测试用例很头疼&#xff0c;无法接触需求&#xff0c;只能根据站在用户的角度去做测试&#xff0c;但是这样情况会导致不能全方位的测试APP&#xff0c;这种情况就需要一份测试用例了&#xff0c;但是不…

Cruise 从零搭建模型

第一步&#xff0c;新建一个project&#xff1a; 下面添加version&#xff1a; 将该新建的task加载进来&#xff0c;然后保存&#xff1a; 保存完之后&#xff0c;文件夹内多了很多内容&#xff1a; 可以看出&#xff0c;用这种方法&#xff0c;只能建立两层文件夹&#xff0c;…

LeetCode —— 回溯

77. 组合 给定两个整数 n 和 k&#xff0c;返回范围 [1, n] 中所有可能的 k 个数的组合。 示例&#xff1a;输入&#xff1a;n 4, k 2 输出&#xff1a; [ [1,2], [1,3], [1,4], [2,3], [2,4], [3,4]] class Solution {List<List<Integer>> list new…