news 2026/4/4 11:41:44

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/1 16:34:40

HarmonyOS应用模块配置详解:从入门到精通

HarmonyOS应用模块配置详解&#xff1a;从入门到精通 【免费下载链接】harmony-utils harmony-utils 一款功能丰富且极易上手的HarmonyOS工具库&#xff0c;借助众多实用工具类&#xff0c;致力于助力开发者迅速构建鸿蒙应用。其封装的工具涵盖了APP、设备、屏幕、授权、通知、…

作者头像 李华
网站建设 2026/3/25 21:35:37

Node-ESC/POS 终极指南:快速掌握 Node.js 打印机控制技术

Node-ESC/POS 终极指南&#xff1a;快速掌握 Node.js 打印机控制技术 【免费下载链接】node-escpos &#x1f5a8;️ ESC/POS Printer driver for Node.js 项目地址: https://gitcode.com/gh_mirrors/no/node-escpos 在现代商业应用中&#xff0c;POS打印机是不可或缺的…

作者头像 李华
网站建设 2026/3/28 2:47:27

纷析云财务软件开源版:企业财务管理新选择 [特殊字符]

纷析云财务软件开源版&#xff1a;企业财务管理新选择 &#x1f680; 【免费下载链接】纷析云财务软件 纷析云SAAS云财务软件开源版&#xff0c;包含账套、凭证字、科目、期初、币别、账簿、报表、凭证、结账等功能。 纷析云开源财务系统&#xff0c;餐饮行业财务软件、微服务架…

作者头像 李华
网站建设 2026/4/3 15:31:07

MFC基础知识

MFC相关类介绍Windows API 类集合类杂项类a异常处理类函数Afx全局函数宏MFC宏MFC数据类型

作者头像 李华
网站建设 2026/3/30 18:48:13

Stable Diffusion配置全攻略:从零搭建AI绘画环境

Stable Diffusion配置全攻略&#xff1a;从零搭建AI绘画环境 【免费下载链接】stable-diffusion A latent text-to-image diffusion model 项目地址: https://gitcode.com/gh_mirrors/st/stable-diffusion 想要体验AI绘画的魅力&#xff0c;却总是在环境配置这一步卡住&…

作者头像 李华
网站建设 2026/3/31 13:42:46

MOSES终极指南:分子生成模型基准测试平台完全解析

MOSES终极指南&#xff1a;分子生成模型基准测试平台完全解析 【免费下载链接】moses 项目地址: https://gitcode.com/gh_mirrors/mo/moses 在药物研发和材料科学领域&#xff0c;如何快速生成高质量的新型分子一直是个技术难题。传统的实验方法耗时费力&#xff0c;而…

作者头像 李华