news 2025/12/13 12:23: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进行投诉反馈,一经查实,立即删除!
网站建设 2025/12/13 12:22:36

被遗忘的支点:十字槽平台,工业制造的隐形基石

十字槽平台这个被低估的工业支点&#xff0c;以其永恒的刚性&#xff0c;默默支撑着这个时代所有的柔性梦想与智能飞跃。它的价值&#xff0c;正在于它让我们铭记&#xff1a;真正的制造力量&#xff0c;始终深植于那些静默、坚实、且历久弥新的基础之中。 任何精制造&#xff…

作者头像 李华
网站建设 2025/12/13 12:21:44

phpredis扩展的压缩技术深度解析:从性能瓶颈到优化实践

phpredis扩展的压缩技术深度解析&#xff1a;从性能瓶颈到优化实践 【免费下载链接】phpredis A PHP extension for Redis 项目地址: https://gitcode.com/gh_mirrors/ph/phpredis 在当今高并发的Web应用环境中&#xff0c;Redis作为高性能的内存数据库已成为不可或缺的…

作者头像 李华
网站建设 2025/12/13 12:19:30

10分钟搞定FossFLOW部署:Docker多架构支持与数据持久化终极指南

10分钟搞定FossFLOW部署&#xff1a;Docker多架构支持与数据持久化终极指南 【免费下载链接】OpenFLOW 项目地址: https://gitcode.com/gh_mirrors/openflow1/OpenFLOW 还在为复杂的开源工具部署而头疼吗&#xff1f;&#x1f914; 今天我要分享一个超简单的FossFLOW部…

作者头像 李华
网站建设 2025/12/13 12:19:09

Windows PowerShell 2.0 完整安装与使用指南

Windows PowerShell 2.0 完整安装与使用指南 【免费下载链接】WindowsPowerShell2.0安装包 本仓库提供了一个用于安装 Windows PowerShell 2.0 的资源文件。Windows PowerShell 2.0 是微软推出的一款强大的命令行工具&#xff0c;适用于 Windows 操作系统。通过安装此版本&…

作者头像 李华
网站建设 2025/12/13 12:18:27

Unity高效3D模型导入导出终极指南:glTFast全面解析

Unity高效3D模型导入导出终极指南&#xff1a;glTFast全面解析 【免费下载链接】glTFast Efficient glTF 3D import / export package for Unity 项目地址: https://gitcode.com/gh_mirrors/gl/glTFast 在Unity项目开发中&#xff0c;高效处理3D模型是每个开发者都会面临…

作者头像 李华
网站建设 2025/12/13 12:17:43

5个理由让你爱上DesktopSharing:实时桌面共享的终极解决方案

5个理由让你爱上DesktopSharing&#xff1a;实时桌面共享的终极解决方案 【免费下载链接】DesktopSharing 桌面共享, 支持RTSP转发, RTSP推流, RTMP推流。 项目地址: https://gitcode.com/gh_mirrors/de/DesktopSharing 还在为远程协作的延迟和兼容性问题烦恼吗&#xf…

作者头像 李华