【C# 基础精讲】数组的创建与操作

news2024/9/20 16:28:11

在这里插入图片描述

数组是C#编程中非常重要的数据结构,它是一种用于存储相同类型元素的集合。通过数组,我们可以方便地访问和处理多个相关数据,这在很多编程场景下都是非常有用的。本文将详细介绍C#数组的创建与操作,包括数组的声明、初始化、访问元素、修改元素、获取数组长度、遍历数组以及使用多维数组等内容。

1. 创建数组

在C#中,有两种常见的方式可以创建数组:静态创建和动态创建。

静态创建数组

静态创建数组是在声明数组时就指定数组的长度和初始化数组的元素。语法为:

// 创建一个整数数组,长度为5
int[] numbers = new int[5];

// 创建一个字符串数组并初始化元素
string[] fruits = new string[] { "apple", "orange", "banana" };

在上述代码中,int[]表示整数数组,string[]表示字符串数组。在声明数组时,需要使用new关键字来创建数组对象,并通过大括号{}初始化数组的元素。

动态创建数组

动态创建数组是在运行时根据需要指定数组的长度和初始化数组的元素。通过用户输入或其他运行时逻辑来确定数组的长度。例如:

Console.Write("请输入数组长度:");
int length = int.Parse(Console.ReadLine());

// 动态创建整数数组
int[] dynamicArray = new int[length];

在上述代码中,用户输入的值将决定数组的长度,并且在运行时创建数组对象。

2. 访问数组元素

数组的元素可以通过索引访问,数组索引从0开始,依次递增。使用方括号[]来指定元素的索引。

int[] numbers = { 10, 20, 30, 40, 50 };
Console.WriteLine(numbers[0]); // 输出第一个元素:10
Console.WriteLine(numbers[3]); // 输出第四个元素:40

在上述代码中,numbers[0]表示访问数组numbers的第一个元素,即10;numbers[3]表示访问数组numbers的第四个元素,即40。

3. 修改数组元素

可以通过索引修改数组的元素。

string[] fruits = { "apple", "orange", "banana" };
fruits[1] = "grape"; // 将第二个元素修改为"grape"
Console.WriteLine(fruits[1]); // 输出修改后的元素:"grape"

在上述代码中,fruits[1]表示修改数组fruits的第二个元素,将其值从"orange"修改为"grape"。

4. 数组长度

可以通过数组的Length属性获取数组的长度。

int[] numbers = { 10, 20, 30, 40, 50 };
int length = numbers.Length; // 获取数组的长度,此处为5

在上述代码中,numbers.Length表示获取数组numbers的长度,即数组中元素的个数。

5. 遍历数组

遍历数组是访问数组中所有元素的常用方法。可以使用循环结构(如forforeach)遍历数组中的所有元素。

使用 for 循环遍历数组

int[] numbers = { 1, 2, 3, 4, 5 };

// 使用 for 循环遍历数组
for (int i = 0; i < numbers.Length; i++)
{
    Console.WriteLine(numbers[i]);
}

在上述代码中,for循环从0开始遍历到numbers.Length - 1,依次输出数组中的每个元素。

使用 foreach 循环遍历数组

int[] numbers = { 1, 2, 3, 4, 5 };

// 使用 foreach 循环遍历数组
foreach (int number in numbers)
{
    Console.WriteLine(number);
}

在上述代码中,foreach循环遍历numbers数组中的每个元素,并将元素的值赋给变量number,然后输出number的值。

遍历数组时,使用for循环可以更灵活地控制数组的索引,而foreach循环则更简洁,适用于遍历整个数组。

6. 多维数组

除了一维数组,C#还支持多维数组,例如二维数组和三维数组。多维数组是按照多个索引来访问元素的。

创建二维数组

// 创建二维数组
int[,] matrix = new int[3, 3]
{
    { 1, 2, 3 },
    { 4, 5, 6 },
    { 7, 8, 9 }
};

在上述代码中,int[,]表示整数二维数组,new int[3, 3]表示数组的行数和列数均为3。数组元素通过两个索引访问,例如matrix[1, 2]表示获取第二行第三列的元素,值为6。

创建三维数组

// 创建三维数组
int[,,] cube = new int[3, 3, 3]
{
    {
        { 1, 2, 3 },
        { 4, 5, 6 },
        { 7, 8, 9 }
    },
    {
        { 10, 11, 12 },
        { 13, 14, 15 },
        { 16, 17, 18 }
    },
    {
        { 19, 20, 21 },
        { 22, 23, 24 },
        { 25, 26, 27 }
    }
};

在上述代码中,int[,,]表示整数三维数组,new int[3, 3, 3]表示数组的三个维度的长度均为3。数组元素通过三个索引访问,例如cube[1, 2, 1]表示获取第二个维度的第三行第二列的元素,值为17。

7. 数组方法

C#提供了一些常用的数组方法,方便对数组进行操作。下面介绍一些常用的数组方法:

Array.Sort()

Array.Sort()方法用于对数组元素进行排序。默认情况下,会按照数组元素的自然顺序进行升序排序。

int[] numbers = { 5, 2, 8, 1, 9 };
Array.Sort(numbers); // 对数组进行排序

在上述代码中,numbers数组将会被排序为 { 1, 2, 5, 8, 9 }

Array.Reverse()

Array.Reverse()方法用于反转数组元素的顺序。

int[] numbers = { 1, 2, 3, 4, 5 };
Array.Reverse(numbers); // 反转数组元素的顺序

在上述代码中,numbers数组将会被反转为 { 5, 4, 3, 2, 1 }

Array.IndexOf()

Array.IndexOf()方法用于查找指定元素在数组中的索引。

int[] numbers = { 10, 20, 30, 40, 50 };
int index = Array.IndexOf(numbers, 30); // 查找元素30的索引,此处为2

在上述代码中,index的值为2,表示元素30在numbers数组中的索引为2。

Array.Copy()

Array.Copy()方法用于复制数组的一部分到另一个数组中。

int[] source = { 1, 2, 3, 4, 5 };
int[] destination = new int[3];
Array.Copy(source, 1, destination, 0, 3); // 从source数组的索引1开始复制3个元素到destination数组

在上述代码中,destination数组将被复制为 { 2, 3, 4 }

8. 数组与List

除了数组,C#还提供了List<T>泛型集合类,它也可以用于存储一组相同类型的元素。List<T>比数组更灵活,它可以动态调整大小,并提供了许多方便的方法来操作元素。要使用List<T>,需要引入System.Collections.Generic命名空间。

using System.Collections.Generic;

// 创建一个整数列表
List<int> numbersList = new List<int>();
numbersList.Add(1); // 向列表中添加元素
numbersList.Add(2);
numbersList.Add(3);

// 遍历列表
foreach (int number in numbersList)
{
    Console.WriteLine(number);
}

在上述代码中,我们创建了一个List<int>类型的列表,并使用Add()方法向列表中添加元素。然后使用foreach循环遍历列表,并输出每个元素。

总结

数组是C#中用于存储相同类型元素的重要数据结构。本文介绍了数组的创建与操作,包括静态创建和动态创建数组、访问数组元素、修改数组元素、获取数组长度、遍历数组以及使用多维数组等内容。另外,我们还简要介绍了一些常用的数组方法。除了数组,List<T>也是存储一组数据的好选择。根据不同的需求,合理选择数组或List<T>,能够更好地处理和操作数据,提高代码的效率和可维护性。希望本文对您理解C#数组的创建与操作有所帮助,祝您在C#编程的学习和实践中取得更多进步!

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

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

相关文章

.bit域名调研

.bit域名研究 问题&#xff1a; .bit域名和ENS域名的相同点&#xff1f;不同点&#xff1f;有什么关系&#xff1f; .bit的定义 .bit 是基于区块链的&#xff0c;开源的&#xff0c;跨链去中心化账户系统.bit 提供了以 .bit 为后缀的全局唯一的命名体系&#xff0c;可用于加密…

半导体器件||的学习

电子管的介绍&#xff1a; 到底什么是电子管&#xff08;真空管&#xff09;&#xff1f; - 知乎 芯片破壁者&#xff08;一&#xff09;&#xff1a;从电子管到晶体管“奇迹”寻踪 - 知乎 晶体管&#xff1a; 什么是晶体管&#xff1f;它有什么作用&#xff1f; - 知乎 改…

Fastjson 使用指南

文章目录 Fastjson 使用指南0 简要说明为什么要用JSON&#xff1f;用JSON的好处是什么&#xff1f;为什么要用JSON&#xff1f;JSON好处 1 常用数据类型的JSON格式值的范围 2 快速上手2.1 依赖2.2 实体类2.3 测试类 3 常见用法3.1 序列化操作核心操作对象转换为JSON串list转换J…

CAD练习——绘制房子平面图

首先还是需要设置图层、标注、文字等 XL&#xff1a;构造线 用构造线勾勒大致的轮廓&#xff1a; 使用多线命令&#xff1a;ML 绘制墙壁 可以看到有很多交叉点的位置 用多线编辑工具将交叉点处理 有一部分处理不了的&#xff0c;先讲多线分解&#xff0c;然后用修剪打理&…

一站式印度跨境电商平台开发--多用户购物商城搭建

搭建一个一站式印度跨境电商平台开发&#xff0c;需要考虑以下几个方面&#xff1a;平台设计&#xff0c;技术架构&#xff0c;多用户购物商城搭建。 一、平台设计&#xff1a; 1. 市场调研&#xff1a;了解印度电商市场的特点和需求&#xff0c;确定目标用户群体。 2. 平台功…

【Q-dir】常用设置分享

Q-dir是一个资源管理器&#xff0c;但有些宝藏设置在初始使用时没有展现&#xff0c;后面配合AHK设置快捷键启动更方便&#xff0c;快捷键推荐winq 点击这个小按钮可以展示导航窗格 此处是设置导航窗格&#xff0c;又名树状列表 点击空白出返回上一页 使用颜色过滤器&…

python几岁可以学零基础,python多大的孩子可以学

大家好&#xff0c;小编为大家解答多大的孩子可以学python的问题。很多人还不知道学python多大年龄可以学&#xff0c;现在让我们一起来看看吧&#xff01; python编程是现在很多孩子接触编程的好选择&#xff0c;它能够给孩子带来容易入门的效果。那么&#xff0c;python编程少…

灰度非线性变换之c++实现(qt + 不调包)

本章介绍灰度非线性变换&#xff0c;具体内容包括&#xff1a;对数变换、幂次变换、指数变换。他们的共同特点是使用非线性变换关系式进行图像变换。 1.灰度对数变换 变换公式&#xff1a;y a log(1x) / b&#xff0c;其中&#xff0c;a控制曲线的垂直移量&#xff1b;b为正…

有哪些免费的mac虚拟机软件?

在当今数字化时代&#xff0c;虚拟机系统成为许多用户在电脑上同时运行多个操作系统的理想选择。虚拟机系统不仅能够提供隔离环境&#xff0c;还可以帮助用户在单一设备上使用多个操作系统和应用程序。然而&#xff0c;有些用户可能会面临安装软件和提高虚拟机性能的挑战。下面…

设计方法编写测试用例---思路分析

测一四年我在YX公司带测试团队&#xff0c;一个用例评审的会议上&#xff0c;一不小心超常发挥&#xff0c;结果卡在了一个用例设计方法上&#xff0c;印象非常深刻&#xff0c;当时的业务场景是支付方式的选择和优惠方案。 在后来的工作中&#xff0c;也曾几次遇到需要选择合…

Games101学习笔记 -光栅化

光栅化 经过MVP矩阵和视口变换后&#xff0c;我们就可以从相机的角度看到一个和屏幕大小一致的二维平面。 那么把这个看到的二维平面应用到我们的屏幕上的过程就是光栅化。在这儿我们需要补充一个概念-像素&#xff1a; 像素&#xff1a; 一个二位数组&#xff0c;数组中每个…

Games101学习笔记 - MVP矩阵

MV矩阵&#xff08;模型视图变换&#xff09; 目的&#xff0c;把摄像机通过变换移动的世界坐标远点&#xff0c;并且朝向与Z轴的负方向相同。这个变换就是模型试图变换。 因为移动了相机&#xff0c;如果想保持正确的渲染的话&#xff0c;那么对应的物体需要要和相机保持相对…

【问题解决:在英伟达nvidia的jetson-orin-nx上使用调试can基础收发-遗留问题-开机自启动can】

【问题解决在英伟达nvidia的jetson-orin-nx上使用调试can基础收发-遗留问题-开机自启动can】 1、概述2、实验环境3、问题描述# 1-1、发送可以发送&#xff0c;但是PC发送数据收不到。# 1-2、接收是可以接收&#xff0c;但是发送PC收不到数据 4、解决方式&#xff08;1&#xff…

常用的负载均衡算法(NGINX篇)

负载均衡算法用于在多个服务器或资源之间分配工作负载&#xff0c;以优化资源利用率、降低延迟、提高吞吐量并确保系统的容错性。 这里介绍并实验4种负载均衡算法&#xff08;随机的方法理论上也算&#xff0c;但一般不会这么搞&#xff09;&#xff0c;在NGINX上。 目录 轮询…

Vue 插槽 slot

solt 插槽需要分为 2.6.0 版本以上和 2.6.0版本以下。 2.6.0 版本以下的 slot 插槽在&#xff0c;2.x版本将继续支持&#xff0c;但是在 Vue 3 中已被废弃&#xff0c;且不会出现在官方文档中。 作用 插槽 prop 允许我们将插槽转换为可复用的模板&#xff0c;这些模板可以基于…

【第一阶段】kotlin的函数

函数头 fun main() {getMethod("zhangsan",22) }//kotlin语言默认是public,kotlin更规范&#xff0c;先有输入&#xff08; getMethod(name:String,age:Int)&#xff09;再有输出(Int[返回值]) private fun getMethod(name:String,age:Int): Int{println("我叫…

拓扑序练习(一)

题目 LintCode127 给定一个有向图&#xff0c;图节点的拓扑排序定义如下: 对于图中的每一条有向边 A -> B , 在拓扑排序中A一定在B之前. 拓扑排序中的第一个节点可以是图中的任何一个没有其他节点指向它的节点。 如下图所示&#xff1a; 拓扑排序可以为: [0, 1, 2, 3, 4,…

排序八卦炉之总复习【改良版】

文章目录 1.总结2.总代码2.1Stack.h2.2Stack.c2.3Sort.h2.4Sort.c2.5Test.c 1.总结 2.总代码 点击 排序&#xff08;C&#xff09; 跳转码云获取完整代码 2.1Stack.h #pragma once #include <stdio.h> #include <assert.h> #include <stdlib.h> #include …

以http_proxy和ajp_proxy方式整合apache和tomcat(动静分离)

注意&#xff1a;http_proxy和ajp_proxy的稳定性不如mod_jk 一.http_proxy方式 1.下载mod_proxy_html.x86_64 2.在apache下创建http_proxy.conf文件&#xff08;或者直接写到conf/httpd.conf文件最后&#xff09; 3.查看server.xml文件 到tomcat的安装目录下的conf/serve…

Python-OpenCV中的图像处理-图像阀值

Python-OpenCV中的图像处理-图像阀值 图像阈值单阈值自适应阈值Otsus二值化 图像阈值 单阈值 与名字一样&#xff0c;这种方法非常简单。但像素值高于阈值时&#xff0c;我们给这个像素赋予一个新值&#xff08;可能是白色&#xff09;&#xff0c;否则我们给它赋予另外一种颜…