C#基础(3)一维数组

2024-09-04 15:44

本文主要是介绍C#基础(3)一维数组,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

我们先前已经进行了枚举的学习,但其实枚举相对来说,设计到的计算逻辑比较少,大多数时候都是和switch一起进行分支判断,而且屏幕前的你应该也发现了,这玩意儿其实更多就是一个编码规范的学习。

但今天我们要开始学习的数组:一维数组,多维数组,交错数组,这些在你日后的算法学习中也会经常出现。

所以希望大家跟紧我的脚步,把这个知识点理解透彻。

数组有很多作用,以下是其中一些常见的作用:

  1. 存储和访问数据:数组可以用来存储一组数据项,并且可以通过索引来访问和操作这些数据项。数组的索引从0开始,可以直接访问数组中的任意一个元素。

  2. 快速查找:由于数组中的元素是按照固定位置存储的,因此可以通过索引快速定位到需要的元素,从而实现快速的查找操作。

  3. 排序和搜索:可以使用数组来实现排序和搜索算法,例如冒泡排序、快速排序、二分搜索等。

  4. 存储多个对象:数组可以存储多个对象,例如存储一组学生对象或者一组商品对象。

  5. 传递参数:可以将数组作为参数传递给函数或方法,以便在不同的上下文中共享和处理数据。

  6. 实现其他数据结构:许多其他数据结构,如栈、队列、链表等,都可以通过数组来实现。

总而言之,数组是一种非常基础且常用的数据结构,它可以在编程中起到很多方面的作用,使得数据的存储、操作和处理更加方便和高效。

基本概念

数组是存储异族相同类型数据的集合,而在实际开发中,一维数组简称为数组。

数组的声明

数组的声明本身有很多种形式,这里博主就带大家一起了解一下。

1.变量类型【】 数组名

int[] arr1;//相当于没有实际占用空间,只是声明了一个变量,具体存储多少和存储了什么并不知道

2.变量类型【】数组名=new 变量类型【数组长度】

int[] arr2=new int[5];//相当于用零占用了五个空间

这里如果声明了长度,c#会默认放0去实现占位,这也是计算机识别空间的一种手段,如果什么都不放,计算机怎么知道这里面有几个东西,又有多长呢。

3.变量类型【】数组名=new 变量类型【数组长度】{内容1,内容2...}

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

这种方式,其实相当于就是决定了空间中占位的元素,这个元素必须要和前面类型保持一致。

4.变量类型【】数组名=new 变量类型【】{内容1,内容2...}

int[] arr4=new int[]{1,2,3,4,};

这种写法其实就是让后面的元素来决定这个数组存储的长度,相当于第三种写法的一种省略。

5.变量类型【】数组名={内容1,内容2...}

int[] arr5={1,2,3}

显然,这是最方便的一种写法,也是比较常用的写法。

看完这五种写法,想毕你应该已经知道数组如何声明了,这些东西还是希望大家要牢记,基础一直都是重中之重。

接下来我们就来讲怎么用它

数组的使用

用它,就要先得到它。

获取数组的长度

Console.Writeline(arr.Length);

关键字:数组名.Length

获取数组中的具体元素

Console.Writeline(arr[0]);

[数字],我们一般叫下标,里面的数字就是索引。

数组的下标和索引是用来标识和访问数组中元素的方式。

数组下标是从0开始的整数,用来表示数组中元素的位置。例如,对于一个有5个元素的数组,它们的下标分别是0, 1, 2, 3, 4。通过使用数组下标,我们可以根据下标的值来访问数组中的元素,比如数组名[下标]的方式。

数组索引是用来表示数组中元素相对于数组起始位置的偏移量。索引也是从0开始的,和下标的概念是一样的。通过使用数组索引,可以像下标一样来访问数组中的元素,也就是数组名[索引]的方式。

所以,语法为:数组名[索引值]。

修改元素

直接赋值即可

arr[0]=99;

遍历数组(for循环)

下面是一个使用for循环遍历数组示例:

using System;class Program
{static void Main(string[] args){// 创建一个整数数组int[] numbers = { 1, 2, 3, 4, 5 };// 使用for循环遍历数组for (int i = 0; i < numbers.Length; i++){Console.WriteLine(numbers[i]);}}
}

以上代码创建了一个整数数组 numbers,然后使用 for 循环遍历数组并将数组元素打印到控制台上。输出结果将会是:

1
2
3
4
5

 其实遍历不难,因为一维数组本身思考量并不高。

增加和删除元素

重点:c#中数组初始化以后是不能够直接添加新的元素的!

所以我们增加元素的根本就是,用一个新数组去替换旧的数组

using System;class Program
{static void Main(string[] args){// 创建两个个整数数组int[] arr1 = new int[5] { 1,2,3,4,5};int[] arr2 = new int[6] ;// 使用for循环遍历数组for (int i = 0; i < arr1.Length; i++){arr2[i] = arr1[i];}arr1 = arr2;arr1[5] = 3;for (int i = 0; i < arr1.Length; i++){Console.WriteLine(arr1[i]);}}
}

你可能会疑惑,博主,这不是麻烦了吗?我直接用一个新数组存储了旧数组,然后再加一个元素不是一样的吗?当然,你是对的,但是这也体现的我们开头说的原则。博主这里带着你这样绕着弯子写的目的其实就是让你感受一下我刚刚提到的重点。

那你既然体验了增加元素是如何运作的,删除其实也是一样的道理,只是是用更短的数组去存储罢了。

查找指定元素

其实你到这里应该也能想到具体如何操作,其实就是配合if进行。

这里不说废话,我们直接进例子。

using System;class Program
{static void Main(string[] args){// 创建一个整数数组int[] arr1 = new int[5] { 1,2,3,4,5};int a =3//创建一个目标值// 使用for循环遍历数组for (int i = 0; i < arr1.Length; i++){if(arr1[i]==a){Console.Writeline("{0}",i);break;}}}
}

总结

其实到这里,我们关于一维数组的知识点就全部讲完了,你也发现博主讲一个数据类型的思路,其实就是从概念,到声明,再到使用,而使用中,其实就是五个过程,得,改,遍历,增,删,查。

日后我们进行其他复杂数据结构地讲解时,大抵也是这样的套路。

希望这篇对数组讲解的文章对你有帮助。

还是那句话,学习基础,戒骄戒躁,脚踏实地。

共勉。

请期待我的下一篇博文!

这篇关于C#基础(3)一维数组的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1136367

相关文章

C#借助Spire.XLS for .NET实现在Excel中添加文档属性

《C#借助Spire.XLSfor.NET实现在Excel中添加文档属性》在日常的数据处理和项目管理中,Excel文档扮演着举足轻重的角色,本文将深入探讨如何在C#中借助强大的第三方库Spire.... 目录为什么需要程序化添加Excel文档属性使用Spire.XLS for .NET库实现文档属性管理Sp

Java数组动态扩容的实现示例

《Java数组动态扩容的实现示例》本文主要介绍了Java数组动态扩容的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录1 问题2 方法3 结语1 问题实现动态的给数组添加元素效果,实现对数组扩容,原始数组使用静态分配

Java利用Spire.Doc for Java实现在模板的基础上创建Word文档

《Java利用Spire.DocforJava实现在模板的基础上创建Word文档》在日常开发中,我们经常需要根据特定数据动态生成Word文档,本文将深入探讨如何利用强大的Java库Spire.Do... 目录1. Spire.Doc for Java 库介绍与安装特点与优势Maven 依赖配置2. 通过替换

C++,C#,Rust,Go,Java,Python,JavaScript的性能对比全面讲解

《C++,C#,Rust,Go,Java,Python,JavaScript的性能对比全面讲解》:本文主要介绍C++,C#,Rust,Go,Java,Python,JavaScript性能对比全面... 目录编程语言性能对比、核心优势与最佳使用场景性能对比表格C++C#RustGoJavapythonjav

C# 预处理指令(# 指令)的具体使用

《C#预处理指令(#指令)的具体使用》本文主要介绍了C#预处理指令(#指令)的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录1、预处理指令的本质2、条件编译指令2.1 #define 和 #undef2.2 #if, #el

C#实现将Excel工作表拆分为多个窗格

《C#实现将Excel工作表拆分为多个窗格》在日常工作中,我们经常需要处理包含大量数据的Excel文件,本文将深入探讨如何在C#中利用强大的Spire.XLSfor.NET自动化实现Excel工作表的... 目录为什么需要拆分 Excel 窗格借助 Spire.XLS for .NET 实现冻结窗格(Fro

C# Semaphore与SemaphoreSlim区别小结

《C#Semaphore与SemaphoreSlim区别小结》本文主要介绍了C#Semaphore与SemaphoreSlim区别小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的... 目录一、核心区别概览二、详细对比说明1.跨进程支持2.异步支持(关键区别!)3.性能差异4.API 差

C# List.Sort四种重载总结

《C#List.Sort四种重载总结》本文详细分析了C#中List.Sort()方法的四种重载形式及其实现原理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友... 目录1. Sort方法的四种重载2. 具体使用- List.Sort();- IComparable

C#中Trace.Assert的使用小结

《C#中Trace.Assert的使用小结》Trace.Assert是.NET中的运行时断言检查工具,用于验证代码中的关键条件,下面就来详细的介绍一下Trace.Assert的使用,具有一定的参考价值... 目录1、 什么是 Trace.Assert?1.1 最简单的比喻1.2 基本语法2、⚡ 工作原理3

C#中DateTime的格式符的实现示例

《C#中DateTime的格式符的实现示例》本文介绍了C#中DateTime格式符的使用方法,分为预定义格式和自定义格式两类,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值... 目录DateTime的格式符1.核心概念2.预定义格式(快捷方案,直接复用)3.自定义格式(灵活可控