![[No0000EB]C# 数组(Array) [No0000EB]C# 数组(Array)](https://image.shishitao.com:8440/aHR0cHM6Ly9ia3FzaW1nLmlrYWZhbi5jb20vdXBsb2FkL2NoYXRncHQtcy5wbmc%2FIQ%3D%3D.png?!?w=700&webp=1)
数组是一个存储相同类型元素的固定大小的顺序集合。数组是用来存储数据的集合,通常认为数组是一个同一类型变量的集合。
声明数组变量并不是声明 number0、number1、...、number99 一个个单独的变量,而是声明一个就像 numbers 这样的变量,然后使用 numbers[0]、numbers[1]、...、numbers[99] 来表示一个个单独的变量。数组中某个指定的元素是通过索引来访问的。
所有的数组都是由连续的内存位置组成的。最低的地址对应第一个元素,最高的地址对应最后一个元素。
声明数组
datatype[] arrayName;
其中,
- datatype 用于指定被存储在数组中的元素的类型。
- [ ] 指定数组的秩(维度)。秩指定数组的大小。
- arrayName 指定数组的名称。
初始化数组
声明一个数组不会在内存中初始化数组。当初始化数组变量时,您可以赋值给数组。
数组是一个引用类型,所以您需要使用 new 关键字来创建数组的实例。
赋值给数组
double[] balance = new double[];
balance[] = 4500.0;//可以通过使用索引号赋值给一个单独的数组元素; double[] balances = { 2340.0, 4523.69, 3421.0};//可以在声明数组的同时给数组赋值; int [] marks = new int[] { , , , , };//可以创建并初始化一个数; int [] marks2 = new int[] { , , , , };//可以省略数组的大小; int[] score = marks;//可以赋值一个数组变量到另一个目标数组变量中。这样目标和源会指向相同的内存位置:
访问数组元素
元素是通过带索引的数组名称来访问的。这是通过把元素的索引放置在数组名称后的方括号中来实现的。
C# 数组细节
概念 | 描述 |
---|---|
多维数组 | C# 支持多维数组。多维数组最简单的形式是二维数组。 |
交错数组 | C# 支持交错数组,即数组的数组。 |
传递数组给函数 | 您可以通过指定不带索引的数组名称来给函数传递一个指向数组的指针。 |
参数数组 | 这通常用于传递未知数量的参数给函数。 |
Array 类 | 在 System 命名空间中定义,是所有数组的基类,并提供了各种用于数组的属性和方法。 |
1.C# 多维数组
C# 支持多维数组。多维数组又称为矩形数组。
string [,] names;//声明一个 string 变量的二维数组
int [ , , ] m;//声明一个 int 变量的三维数组
二维数组
多维数组最简单的形式是二维数组。一个二维数组,在本质上,是一个一维数组的列表。
一个二维数组可以被认为是一个带有 x 行和 y 列的表格。
Column0 |
Column1 |
Column2 |
Column3 |
|
Row0 |
a[0][0] |
a[0][1] |
a[0][2] |
a[0][3] |
Row1 |
a[1][0] |
a[1][1] |
a[1][2] |
a[1][3] |
Row2 |
a[2][0] |
a[2][1] |
a[2][2] |
a[2][3] |
因此,数组中的每个元素是使用形式为 a[ i , j ] 的元素名称来标识的,其中 a 是数组名称,i 和 j 是唯一标识 a 中每个元素的下标。
初始化二维数组
多维数组可以通过在括号内为每行指定值来进行初始化。
int [,] a = new int [,] {
{, , , } , /* 初始化索引号为 0 的行 */
{, , , } , /* 初始化索引号为 1 的行 */
{, , , } /* 初始化索引号为 2 的行 */
};
访问二维数组元素
二维数组中的元素是通过使用下标(即数组的行索引和列索引)来访问的。
2.C# 交错数组
交错数组是数组的数组。声明一个数组不会在内存中创建数组。
int[][] test = new int[][];//创建交错数组
for (int i = ; i < test.Length; i++)
{
test[i] = new int[];
} int[][] scores = new int[][]{new int[]{,,},new int[]{,,,}};//初始化一个交错数组
scores 是一个由两个整型数组组成的数组 -- scores[0] 是一个带有 3 个整数的数组,scores[1] 是一个带有 4 个整数的数组。
3.C# 传递数组给函数
在 C# 中,可以传递数组作为函数的参数。通过指定不带索引的数组名称来给函数传递一个指向数组的指针。
using System; namespace ArrayApplication
{
class MyArray
{
double getAverage(int[] arr, int size)
{
int i;
double avg;
int sum = ; for (i = ; i < size; ++i)
{
sum += arr[i];
} avg = (double)sum / size;
return avg;
}
static void Main(string[] args)
{
MyArray app = new MyArray();
/* 一个带有 5 个元素的 int 数组 */
int [] balance = new int[]{, , , , };
double avg; /* 传递数组的指针作为参数 */
avg = app.getAverage(balance, ) ; /* 输出返回值 */
Console.WriteLine( "平均值是: {0} ", avg );//平均值是: 214.4
Console.ReadKey();
}
}
}
4.C# 参数数组
当声明一个方法时,如果不能确定要传递给函数作为参数的参数数目,可以使用参数数组。参数数组通常用于传递未知数量的参数给函数。
params 关键字
在使用数组作为形参时,C# 提供了 params 关键字,使调用数组为形参的方法时,既可以传递数组实参,也可以只传递一组数组。
public 返回类型 方法名称( params 类型名称[] 数组名称 )
using System; namespace ArrayApplication
{
class ParamArray
{
public int AddElements(params int[] arr)
{
int sum = ;
foreach (int i in arr)
{
sum += i;
}
return sum;
}
} class TestClass
{
static void Main(string[] args)
{
ParamArray app = new ParamArray();
int sum = app.AddElements(, , , , );
Console.WriteLine("总和是: {0}", sum);//总和是: 2938
Console.ReadKey();
}
}
}
5.C# Array 类
Array 类是 C# 中所有数组的基类,它是在 System 命名空间中定义。Array 类提供了各种用于数组的属性和方法。
Array 类的属性
序号 |
属性 |
描述 |
1 |
IsFixedSize |
获取一个值,该值指示数组是否带有固定大小。 |
2 |
IsReadOnly |
获取一个值,该值指示数组是否只读。 |
3 |
Length |
获取一个 32 位整数,该值表示所有维度的数组中的元素总数。 |
4 |
LongLength |
获取一个 64 位整数,该值表示所有维度的数组中的元素总数。 |
5 |
Rank |
获取数组的秩(维度)。 |
Array 类的方法
序号 |
方法 |
描述 |
1 |
Clear |
根据元素的类型,设置数组中某个范围的元素为零、为 false 或者为 null。 |
2 |
Copy(Array, Array, Int32) |
从数组的第一个元素开始复制某个范围的元素到另一个数组的第一个元素位置。长度由一个 32 位整数指定。 |
3 |
CopyTo(Array, Int32) |
从当前的一维数组中复制所有的元素到一个指定的一维数组的指定索引位置。索引由一个 32 位整数指定。 |
4 |
GetLength |
获取一个 32 位整数,该值表示指定维度的数组中的元素总数。 |
5 |
GetLongLength |
获取一个 64 位整数,该值表示指定维度的数组中的元素总数。 |
6 |
GetLowerBound |
获取数组中指定维度的下界。 |
7 |
GetType |
获取当前实例的类型。从对象(Object)继承。 |
8 |
GetUpperBound |
获取数组中指定维度的上界。 |
9 |
GetValue(Int32) |
获取一维数组中指定位置的值。索引由一个 32 位整数指定。 |
10 |
IndexOf(Array, Object) |
搜索指定的对象,返回整个一维数组中第一次出现的索引。 |
11 |
Reverse(Array) |
逆转整个一维数组中元素的顺序。 |
12 |
SetValue(Object, Int32) |
给一维数组中指定位置的元素设置值。索引由一个 32 位整数指定。 |
13 |
Sort(Array) |
使用数组的每个元素的 IComparable 实现来排序整个一维数组中的元素。 |
14 |
ToString |
返回一个表示当前对象的字符串。从对象(Object)继承。 |
using System;
namespace ArrayApplication
{
class MyArray
{ static void Main(string[] args)
{
int[] list = { , , , , , , };
int[] temp = list; Console.Write("原始数组: ");//原始数组: 34 72 13 44 25 30 10
foreach (int i in list)
{
Console.Write(i + " ");
}
Console.WriteLine(); // 逆转数组
Array.Reverse(temp);
Console.Write("逆转数组: ");//逆转数组: 10 30 25 44 13 72 34 foreach (int i in temp)
{
Console.Write(i + " ");
}
Console.WriteLine(); // 排序数组
Array.Sort(list);
Console.Write("排序数组: ");//排序数组: 10 13 25 30 34 44 72 foreach (int i in list)
{
Console.Write(i + " ");
}
Console.WriteLine(); Console.ReadKey();
}
}
}