news 2026/3/29 6:26:24

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/3/26 9:15:37

专利撰写支持:生成符合规范的权利要求书初稿

专利撰写支持&#xff1a;生成符合规范的权利要求书初稿 在知识产权竞争日益激烈的今天&#xff0c;高质量专利的撰写效率直接关系到企业的技术壁垒构建速度。一个典型的发明专利申请中&#xff0c;权利要求书是法律保护范围的核心载体&#xff0c;其结构严谨、术语精准、逻辑严…

作者头像 李华
网站建设 2026/3/26 23:05:00

代码随想录 广度优先搜索理论基础

一、BFS的使用场景1.BFS的搜索方式适合于解决两个点之间的最短路径问题。这是因为BFS是从起点出发&#xff0c;以起始点为中心一圈一圈进行搜索&#xff0c;一旦遇到终点&#xff0c;记录之前走过的节点就是一条最短路。2.有一些问题是广搜和深搜都能够解决的&#xff0c;比如岛…

作者头像 李华
网站建设 2026/3/26 11:18:03

QQ APP技术架构分析报告

QQ APP技术架构分析报告 目录 一、核心结论二、Hippy跨端框架分析三、Shadow插件化框架四、小程序生态五、UE4游戏引擎六、PAG动画框架七、Lottie动画八、原生库技术栈九、应用架构特点十、第三方SDK集成十一、技术架构总结十二、总结 一、核心结论 QQ APP采用了混合技术架构…

作者头像 李华
网站建设 2026/3/26 21:06:03

如何快速上手Gemini:LaTeX海报制作的终极指南

如何快速上手Gemini&#xff1a;LaTeX海报制作的终极指南 【免费下载链接】gemini Gemini is a modern LaTex beamerposter theme &#x1f5bc; 项目地址: https://gitcode.com/gh_mirrors/gemin/gemini 你是否曾经为学术会议或展览制作海报而苦恼&#xff1f;传统设计…

作者头像 李华
网站建设 2026/3/18 15:55:28

汇川Easy系列PID_AT指令弹簧质量阻尼系统闭环控制仿真测试

汇川Easy系列PLC系统PID指令(温度控制PID应用编程) https://rxxw-control.blog.csdn.net/article/details/155698602?spm1011.2415.3001.5331https://rxxw-control.blog.csdn.net/article/details/155698602?spm1011.2415.3001.5331 弹簧质量阻尼系统前馈PID位置控制(PLC闭…

作者头像 李华
网站建设 2026/3/26 9:45:13

MeterSphere集群部署终极指南:从单机到高可用的性能飞跃

MeterSphere集群部署终极指南&#xff1a;从单机到高可用的性能飞跃 【免费下载链接】metersphere MeterSphere 一站式开源持续测试平台&#xff0c;为软件质量保驾护航。搞测试&#xff0c;就选 MeterSphere&#xff01; 项目地址: https://gitcode.com/gh_mirrors/me/meter…

作者头像 李华