文章目录
一、数组(array
)(一维数组)
在 C# 中,数组是一种数据结构,用于存储固定大小
的同类型
元素集合。一般一维数组就简称为数组。数组中的每个元素都通过索引来访问,索引是从 0
开始的。
注意,数组属于引用类型
。
1、声明数组
要声明一个数组,你需要指定数组的类型,并使用 []
表示数组。例如:
int[] numbers; // 声明一个整型数组
string[] names; // 声明一个字符串数组
2、初始化数组
数组可以通过两种方式进行初始化:
显式初始化:在声明时直接指定数组的元素。
int[] numbers = new int[3] { 1, 2, 3 };// 创建一个包含 3 个整数的数组 int[] numbers = new int[5]; // 创建一个包含 5 个整数的数组,所有元素默认为 0 string[] names = new string[] { "Alice", "Bob", "Charlie" }; // 创建一个包含 3 个字符串的数组
简洁初始化:通过数组字面量直接给数组赋值。
int[] numbers = { 1, 2, 3, 4, 5 }; // 简单初始化数组 string[] names = { "Alice", "Bob", "Charlie" }; // 初始化字符串数组
3、访问数组元素
数组中的元素可以通过索引来访问,索引从 0
开始。例如:
int[] numbers = { 1, 2, 3, 4, 5 };
Console.WriteLine(numbers[0]); // 输出 1,数组的第一个元素
Console.WriteLine(numbers[3]); // 输出 4,数组的第四个元素
4 、修改数组元素
数组的元素是可以修改的,只需通过索引进行赋值:
int[] numbers = { 1, 2, 3, 4, 5 };
numbers[2] = 10; // 修改第三个元素为 10
Console.WriteLine(numbers[2]); // 输出 10
5、获取数组的长度
使用 .Length
属性来获取数组的元素个数:
int[] numbers = { 1, 2, 3, 4, 5 };
Console.WriteLine(numbers.Length); // 输出 5
6、遍历数组
可以使用 for
循环或 foreach
循环来遍历数组。
使用 for
循环:
int[] numbers = { 1, 2, 3, 4, 5 };
for (int i = 0; i < numbers.Length; i++)
{
Console.WriteLine(numbers[i]); // 输出数组元素
}
使用 foreach
循环:
int[] numbers = { 1, 2, 3, 4, 5 };
foreach (int number in numbers)
{
Console.WriteLine(number); // 输出数组元素
}
7、数组方法
Array
类提供了一些常用的方法来操作数组,例如:
排序:
int[] numbers = { 5, 3, 8, 1, 2 };
Array.Sort(numbers); // 对数组进行升序排序
foreach (var number in numbers)
{
Console.WriteLine(number); // 输出 1, 2, 3, 5, 8
}
逆序:
Array.Reverse(numbers); // 将数组元素逆序
foreach (var number in numbers)
{
Console.WriteLine(number); // 输出 8, 5, 3, 2, 1
}
查找元素:
int[] numbers = { 1, 2, 3, 4, 5 };
int index = Array.IndexOf(numbers, 3); // 查找元素 3 的索引
Console.WriteLine(index); // 输出 2
复制数组:
int[] numbers = { 1, 2, 3, 4, 5 };
int[] copiedNumbers = new int[5];
Array.Copy(numbers, copiedNumbers, numbers.Length); // 将 numbers 数组复制到 copiedNumbers
foreach (var number in copiedNumbers)
{
Console.WriteLine(number); // 输出 1, 2, 3, 4, 5
}
你可能会问,这有什么用?我完全可以使用=赋值即可
int[] copiedNumbers = numbers;
因为开头已经说过了,数组是应用类型,所以直接使用 int[] copiedNumbers = numbers; 其实是将 copiedNumbers 和 numbers 指向了同一个数组对象,而不是创建一个新的副本。因此,如果你在 copiedNumbers 上做修改,也会影响到 numbers,反之亦然。简而言之,这种方式会导致两个变量共享同一个内存区域。
使用Array.Copy复制数组会实现类似值类型
的效果,即创建数组的一个独立副本。这样,当你修改副本时,不会影响原始数组,反之亦然。
8、string.Join
拼接合并数组数据为字符串
string.Join 是 C# 中用于将数组或集合中的元素连接成一个单一的字符串的方法。它可以指定一个分隔符,将数组中的每个元素连接起来,形成一个新的字符串。这个方法非常常见,用于打印或格式化数组数据。
语法:
string result = string.Join(string separator, IEnumerable<string> values);
- separator:用作元素之间的分隔符的字符串。
- values:一个实现了 IEnumerable 接口的集合,通常是一个数组、列表或其他可枚举的集合。
示例:
假设我们有一个字符串数组,并希望将其连接成一个以逗号分隔的字符串:
string[] fruits = { "Apple", "Banana", "Cherry" };
string result = string.Join(", ", fruits);
Console.WriteLine(result);
输出:
Apple, Banana, Cherry
9、数组的注意事项
- 数组是固定大小的:一旦数组的大小被指定,它的大小就不能更改。如果需要更改数组的大小,可以创建一个新的数组并复制数据。
- 数组的索引从 0 开始:访问数组时,必须使用有效的索引,索引超出范围会抛出
IndexOutOfRangeException
异常。 - 默认值:数组中的元素在初始化时会被赋予默认值。例如,整型数组的默认值是
0
,布尔型数组的默认值是false
,引用类型数组的默认值是null
。
二、多维数组
C# 支持多维数组(例如,二维数组)。可以通过逗号分隔的多个维度来定义。
1、二维数组
int[,] matrix = new int[3, 3] // 创建一个 3x3 的二维数组
{
{ 1, 2, 3 },
{ 4, 5, 6 },
{ 7, 8, 9 }
};
Console.WriteLine(matrix[1, 2]); // 输出 6,访问第二行第三列的元素
2、三维数组
int[,,] threeDArray = new int[2, 2, 2]
{
{ { 1, 2 }, { 3, 4 } },
{ { 5, 6 }, { 7, 8 } }
};
Console.WriteLine(threeDArray[1, 0, 1]); // 输出 6
3、其他使用
其他使用和一维数组基本一样,这里就不多介绍了
三、交错数组(了解即可,用的很少)
C# 中的交错数组是一种数组的数组,也就是说,交错数组是一个二维数组的特殊形式,其中每个元素本身也是一个数组。与传统的矩阵型二维数组不同,交错数组中的每一行(即每个子数组)可以具有不同的长度。
1、什么是交错数组?
交错数组其实是一个一维数组,其中的每个元素又是一个数组(可以看作是二维数组的每一行)。这使得每一行的数组长度可以不同,解决了普通二维数组在内存中固定的大小限制问题。
2、如何声明和初始化交错数组?
声明交错数组:
int[][] jaggedArray;
这里,jaggedArray
是一个数组,数组的元素是类型为 int[]
的数组(即一维整数数组)。
初始化交错数组:
jaggedArray = new int[3][]; // 创建一个包含 3 个子数组的交错数组
jaggedArray[0] = new int[4]; // 第一行有 4 个元素
jaggedArray[1] = new int[2]; // 第二行有 2 个元素
jaggedArray[2] = new int[3]; // 第三行有 3 个元素
在这个例子中,jaggedArray
有 3 个元素,分别是长度为 4、2、3 的一维数组。
3、访问和操作交错数组中的元素:
可以通过两层索引来访问交错数组中的元素:
jaggedArray[0][0] = 1; // 第一行第一列的元素赋值为 1
jaggedArray[1][1] = 5; // 第二行第二列的元素赋值为 5
Console.WriteLine(jaggedArray[0][0]); // 输出 1
Console.WriteLine(jaggedArray[1][1]); // 输出 5
4、交错数组的优点与缺点:
优点:
- 灵活性:交错数组可以在每一行中存储不同长度的数组,因此能更好地适应数据大小不等的情况。
- 节省内存:由于每行的数组长度可以不同,所以在内存使用上会更节省,尤其在每行的数据量相差较大的情况下。
缺点:
- 不连续存储:交错数组的每一行实际上是独立存储的,并不按顺序在内存中存储。这可能会导致一些性能上的开销,尤其是在需要频繁访问数组元素时。
- 访问复杂度:与普通的二维数组相比,交错数组的访问略显复杂,因为要通过两次索引来访问数据。
5、与二维数组的比较
假设有一个标准的二维数组(矩阵):
int[,] array = new int[3, 4]; // 创建一个 3x4 的二维数组
二维数组在内存中是连续存储的,所有元素按行列顺序存储,具有固定的行和列数。
而交错数组则更灵活,每一行可以有不同的列数,但其内存布局可能不如二维数组那样连续。
专栏推荐
地址 |
---|
【从零开始入门unity游戏开发之——C#篇】 |
【从零开始入门unity游戏开发之——unity篇】 |
【制作100个Unity游戏】 |
【推荐100个unity插件】 |
【实现100个unity特效】 |
【unity框架开发】 |
完结
赠人玫瑰,手有余香!如果文章内容对你有所帮助,请不要吝啬你的点赞评论和关注
,你的每一次支持
都是我不断创作的最大动力。当然如果你发现了文章中存在错误
或者有更好的解决方法
,也欢迎评论私信告诉我哦!
好了,我是向宇
,https://xiangyu.blog.csdn.net
一位在小公司默默奋斗的开发者,闲暇之余,边学习边记录分享,站在巨人的肩膀上,通过学习前辈们的经验总是会给我很多帮助和启发!如果你遇到任何问题,也欢迎你评论私信或者加群找我, 虽然有些问题我也不一定会,但是我会查阅各方资料,争取给出最好的建议,希望可以帮助更多想学编程的人,共勉~