news 2026/4/23 10:16:39

Visial Studio 中的Array数组

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Visial Studio 中的Array数组

一、简单介绍

Array是C#中所有数组类型的抽象基类,用于存储固定长度的同类型元素集合。

在Visual Studio中,数组是最基础的数据结构之一,适用于需要快速访问元素的场景。

二、数组声明与初始化模板

数组的声明需指定类型维度,初始化时需指定长度或直接赋值元素。

数组类型声明模板说明
一维数组类型[] 数组名 = new 类型[长度]固定长度的线性集合
多维数组类型[] 数组名 = new 类型[行, 列]矩形多维数组(如二维表)
交错数组类型[][] 数组名 = new 类型[行数][]数组的数组(每行长度可变)
隐式类型数组var 数组名 = new[] { 元素1, 元素2 }由元素类型推断数组类型

三、代码示例(Visual Studio控制台应用)

以下示例展示一维数组、多维数组的创建与使用:

// 1. 一维数组:存储5个整数

int[] numbers = new int[5] { 10, 20, 30, 40, 50 };

Console.WriteLine("一维数组元素:");

foreach (int num in numbers)

{

Console.Write(num + " ");// 输出:10 20 30 40 50

}

// 2. 二维数组:3行2列的矩阵

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

Console.WriteLine("\n\n二维数组元素:");

for (int i = 0; i < 3; i++)

{

for (int j = 0; j < 2; j++)

{

Console.Write(matrix[i, j] + " ");// 输出:1 2 / 3 4 / 5 6

}

Console.WriteLine();

}

// 3. 交错数组:2行,每行长度可变

int[][] jaggedArray = new int[2][];

jaggedArray[0] = new int[] { 1, 2, 3 };// 第一行3个元素

jaggedArray[1] = new int[] { 4, 5 };// 第二行2个元素

Console.WriteLine("\n交错数组元素:");

foreach (int[] row in jaggedArray)

{

foreach (int num in row)

{

Console.Write(num + " ");// 输出:1 2 3 / 4 5

}

Console.WriteLine();

}

四、Array类常用静态方法

1. Array.FindIndex()

//根据参数2的条件返回第一个满足条件的元素的索引值
// FindIndex()的功能已经实现了遍历的功能,并且把元素传递到参数2的函数中

说明:

FindIndex<T>(T[], Int32, Int32, Predicate<T>):在数组的指定范围内返回第一个符合条件的元素的索引。
FindIndex<T>(T[], Int32, Predicate<T>):在指定索引后返回第一个符合条件的元素索引。
FindIndex<T>(T[], Predicate<T>):返回第一个符合条件的元素的索引。
示例:

int[] ages = { 1, 2, 3, 4, 5, 6, 7, 8,20,36,29 };

bool FindBig18(int v)
{
//v就是每一个元素 ages[i]
return v > 18;//如果v大于18 返回true ,如果v<=18 返回false
}

bool FindName(string v)
{

return v =="张三";
}

Console.WriteLine(Array.FindIndex(ages, FindBig18) );//8

Console.WriteLine(Array.FindIndex(new string[] {"张三","历史","王五","马六" },FindName));//0

2. Array.FindAll()

// 找到满足条件的所有元素返回是一个数组

说明:

FindAll<T>(T[], Predicate<T>):返回符合条件的所有元素。
示例:

bool FindEven(int v)
{
return v % 2 == 0;
}

int[] arr= Array.FindAll(ages,FindEven);

3. Array.Foreach()

// 循环遍历

说明

对数组的每个元素执行指定的操作。

示例:

Array.ForEach(arr, v => Console.WriteLine(v+"--------"));//遍历出偶数

4. Array.Find()

//找到满足条件的元素

说明:

Find<T>(T[], Predicate<T>):搜索符合条件的第一个元素并返回
示例:

bool FindStart(string v)
{
return v.StartsWith("ssr");
}
Console.WriteLine(Array.Find(new string[] { "ss", "ssr", "r", "a", "b" }, FindStart));//ssr

5. Array.FindLast()

//从后往前找,找到第一个满足条件的元素,返回其索引值

说明:

FindLast<T>(T[], Predicate<T>):返回符合条件的最后一个元素
示例:

bool FindLast1(string v)
{
return v.StartsWith("ab");
}
Console.WriteLine(Array.FindLast(new string[] { "ss", "ssr", "r","ab" ,"abc", "b" }, FindLast1));//"abc"

6. Array.TrueForAll()

//数组内的元素是否都满足条件,如果都满足则为true,否则false

说明:定数组中是否所有元素符合条件。

示例:

bool aa(int v)
{
return v < 30;
}
Console.WriteLine(Array.TrueForAll(ages, aa));//false

7. Array.Exists()

//数组内是否存在满足条件的元素,存在一个条件即可,只要存在则为true,否则false

说明:

确定数组是否包含符合条件的元素。

示例:

Console.WriteLine(Array.Exists(ages, aa));// true

8. Any()

//数组中满足条件的元素存在一个即可等同于 Array.Exists()

示例:

string[] names = new string[] { "ss", "ssr", "r", "ab", "abc", "b" };
Console.WriteLine(names.Any(FindLast1));//true

9. All()

//数组中的所有元素都满足条件,整体结果为true 等同于 Array.TrueForAll()

示例:

Console.WriteLine(names.All(FindLast1));//false

10. Contains()

//数组中是否包含该元素

示例:

Console.WriteLine(names.Contains("abcd")+"------");//false------

11. Concat()

//串联两个数组

示例:

string[] ss = { "2", "3" };
foreach (string item in names.Concat(ss))
{
Console.WriteLine(item+"++++++++");//串联并遍历两个数组中的元素 并附加上"++++++++"
}

五、注意事项

  1. 长度固定:数组一旦创建,长度不可动态修改。若需动态增减元素,建议使用List<T>
  2. 值类型与引用类型
    • 值类型数组(如int[]):元素直接存储值,修改元素不影响原数据。
    • 引用类型数组(如string[]):元素存储对象引用,修改元素会改变原对象。
  3. 多维数组 vs 交错数组
    • 多维数组(int[,]):所有行长度相同,内存连续。
    • 交错数组(int[][]):每行长度可不同,内存不连续,更灵活。
  4. 越界访问:访问数组时若索引超出[0, Length-1]范围,会抛出IndexOutOfRangeException,需注意边界检查。

六、综合示例

//1. 查询类中的所有男性
//2. 查询类中第一个女性
//3. 判断数组中是否全为成年人
//4. 查询类中的第一个未成年男性

class People
{
public enum Sex
{
man = 1,
woman = 2,
}
public string Name { get; set; }

public Sex XingBie { get; set; }

public int Age { get; set; }
}

internal class Program
{
static void Main(string[] args)
{

People[] p = new People[]
{
new People(){Name="张三",Age = 25,XingBie = People.Sex.man},
new People(){Name="李四",Age = 17,XingBie = People.Sex.man},
new People(){Name="王五",Age = 30,XingBie = People.Sex.woman},
new People(){Name="赵六",Age = 25,XingBie = People.Sex.woman},
new People(){Name="刘十",Age = 22,XingBie = People.Sex.man},
};

//1. 查询类中的所有男性FindAll()
bool FindAll(People a)
{
return a.XingBie == People.Sex.man;
}
People[] p1 = Array.FindAll(p, FindAll);

People[] pp = Array.FindAll(p, c => c.XingBie == People.Sex.man);

foreach (People a in p1)
{
Console.WriteLine(a.Name + " " + a.Age + " " + a.XingBie);
}

foreach (People a in pp)
{
Console.WriteLine(a.Name + " " + a.Age + " " + a.XingBie+"------------");
}

//2. 查询类中第一个女性 Array.FindIndex()
bool FindIndex1(People a)
{
return a.XingBie == People.Sex.woman;
}
Console.WriteLine(p[Array.FindIndex(p, FindIndex1)].Name+" "+ p[Array.FindIndex(p, FindIndex1)].XingBie);

bool Find(People a)
{
return a.XingBie == People.Sex.woman;
}
People p2 = Array.Find(p, Find);
Console.WriteLine(p2.Name + " " + p2.XingBie);

//3. 判断数组中是否全为成年人 Array.TrueForAll()
bool TrueForAll1(People a)
{
if (a.Age > 18)
{
return true;
}
return false;
}
bool TrueForAll2(People a)
{
return a.Age >= 18;
}
Console.WriteLine(Array.TrueForAll(p, TrueForAll1));
Console.WriteLine(Array.TrueForAll(p, TrueForAll2));

//4. 查询类中的第一个未成年男性 Array.FindIndex()
bool FindIndex2(People a)
{
if (a.XingBie == People.Sex.man && a.Age >= 18)
{
return true;
}
return false;
}
Console.WriteLine(p[Array.FindIndex(p, FindIndex2)].Name+" " + p[Array.FindIndex(p, FindIndex2)].Age);
}

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 10:16:08

Seal视频下载器:5分钟掌握1000+平台的终极下载指南

还在为这些场景烦恼吗&#xff1f;&#x1f4a1; 【免费下载链接】Seal &#x1f9ad; Video/Audio Downloader for Android, based on yt-dlp, designed with Material You 项目地址: https://gitcode.com/gh_mirrors/se/Seal 刷到超棒的YouTube教程视频&#xff0c;想…

作者头像 李华
网站建设 2026/4/10 9:02:55

计算机毕业设计springboot基于webFaceBox社交圈子 基于Spring Boot框架的微信小程序FaceBox社交平台设计与实现 微信小程序FaceBox社交社区的Spring Boot

计算机毕业设计springboot基于webFaceBox社交圈子t933q9 &#xff08;配套有源码 程序 mysql数据库 论文&#xff09; 本套源码可以在文本联xi,先看具体系统功能演示视频领取&#xff0c;可分享源码参考。随着移动互联网的飞速发展&#xff0c;社交平台已成为人们日常生活中不可…

作者头像 李华
网站建设 2026/4/22 8:09:33

SetCharacterEncoding插件终极指南:轻松解决网页乱码问题

SetCharacterEncoding插件终极指南&#xff1a;轻松解决网页乱码问题 【免费下载链接】谷歌设置编码插件SetCharacterEncoding介绍 谷歌设置编码插件SetCharacterEncoding是一款便捷的浏览器工具&#xff0c;专为解决网页乱码问题而设计。它支持多种编码格式&#xff0c;如UTF-…

作者头像 李华
网站建设 2026/4/22 18:52:44

5分钟掌握openpi:轻松构建智能机械臂AI控制系统

5分钟掌握openpi&#xff1a;轻松构建智能机械臂AI控制系统 【免费下载链接】openpi 项目地址: https://gitcode.com/GitHub_Trending/op/openpi 还在为机械臂AI系统配置复杂、环境依赖冲突而苦恼&#xff1f;硬件驱动适配困难、代码编写门槛高让您望而却步&#xff1f…

作者头像 李华
网站建设 2026/4/20 10:59:59

3步解锁:如何用消费级GPU实现专业级视频创作?

3步解锁&#xff1a;如何用消费级GPU实现专业级视频创作&#xff1f; 【免费下载链接】Wan2.1-T2V-1.3B-Diffusers 项目地址: https://ai.gitcode.com/hf_mirrors/Wan-AI/Wan2.1-T2V-1.3B-Diffusers 还在为视频生成的高门槛而烦恼吗&#xff1f;&#x1f3af; Wan2.1-T…

作者头像 李华
网站建设 2026/4/21 19:10:54

从零构建Conductor工作流引擎:3天快速掌握源码编译全流程

从零构建Conductor工作流引擎&#xff1a;3天快速掌握源码编译全流程 【免费下载链接】conductor Conductor is a microservices orchestration engine. 项目地址: https://gitcode.com/GitHub_Trending/co/conductor 想要亲手打造属于自己的微服务编排系统吗&#xff1…

作者头像 李华