一、数组(Array)
数组是一个存储相同类型元素的固定大小的顺序集合。数组是用来存储数据的集合,通常认为数组是一个同一类型变量的集合。声明数组是声明一个就像 numbers 这样的变量,然后使用 numbers[0]、numbers[1]、...、numbers[99] 来表示一个个单独的变量。数组中某个指定的元素是通过索引来访问的。
二、创建数组
创建数组包括声明和初始化。
声明数组通常按照以下格式声明:
datatype[] arrayName;
其中,
datatype 用于指定元素类型 可以设置不同类型的数组,例如int,string等,在五、数组的数据类型 中有详细列举 [] 用于指定数组的大小 arrayName 指定数组的名称
例如
string[] Result;
声明了一个类型为string,名称为Result的数组。在声明时不能指定数组大小。
通过使用new关键字来创建数组实例,实现数组的初始化。例如
string[] Result = new string[10];
三、给数组赋值
我们可以在声明数组的同时给数组赋值,例如
string[] Result = {"A991","A991","A345","A123","A111","A990" };
我们也可以在初始化数组时给数组赋值,例如
string[] Result2 = new string[6] { "B991", "B991", "B345", "B123", "B111", "B990" };
在上述情况下,我们亦可以省略数组的大小,例如
string[] Result2 = new string[] { "B991", "B991", "B345", "B123", "B111", "B990" };
除了以上方法,我们还可以通过使用索引号赋值给数组中的单个元素,例如
string[] Result3 = new string[10];
Result3[0] = "A333";
顺便一提,数组索引从0开始
我们也可以将一个数组变量赋值给另一个目标数组变量中。在这种情况下,目标和源会指向相同的内存位置。
string[] Result2 = new string[] { "B991", "B991", "B345", "B123", "B111", "B990" };
string[] Result3 = Result2;
四、访问数组元素
元素是通过索引实现的。使用方式为:
string[] Result2 = new string[] { "B991", "B991", "B345", "B123", "B111", "B990" };
string Result3 = Result2[1];
程序中将数组Result2中索引为1对应的数据赋值给变量Result3
除了直接用=赋值,还可以通过循环给数组进行赋值和访问,例如
使用for循环
using System;
namespace ArrayApplication
{
class MyArray
{
static void Main(string[] args)
{
int [] n = new int[10]; /* n 是一个带有 10 个整数的数组 */
int i,j;
/* 初始化数组 n 中的元素 */
for ( i = 0; i < 10; i++ )
{
n[ i ] = i + 100;
}
/* 输出每个数组元素的值 */
for (j = 0; j < 10; j++ )
{
Console.WriteLine("Element[{0}] = {1}", j, n[j]);
}
Console.ReadKey();
}
}
}
使用foreach遍历
using System;
namespace ArrayApplication
{
class MyArray
{
static void Main(string[] args)
{
int [] n = new int[10]; /* n 是一个带有 10 个整数的数组 */
/* 初始化数组 n 中的元素 */
for ( int i = 0; i < 10; i++ )
{
n[i] = i + 100;
}
/* 输出每个数组元素的值 */
foreach (int j in n )
{
int i = j-100;
Console.WriteLine("Element[{0}] = {1}", i, j);
}
Console.ReadKey();
}
}
}
五、数组的数据类型
前面提到
datatype[] arrayName; 中
datatype 用于指定元素类型 可以设置不同类型的数组。
C#中的数据类型体系,这分为两大类:值类型和引用类型。值类型包括整数、浮点、布尔值、字符等,引用类型包括字符串、类、接口、数组等。这些类型都可以作为数组的元素类型。打算把常见的值类型和引用类型都列出来。
此外,还有一些特殊类型的数组,如对象数组和动态数组,他们的使用频率较高,且具有一定的灵活性。
基本数据类型(值类型)
1.整数类型
int[] intArray = new int[5];
uint[] uintArray = new uint[5];
short[] shortArray = new short[5];
long[] longArray = new long[5];
2.浮点类型
float[] floatArray = new float[5];
double[] doubleArray = new double[5];
decimal[] decimalArray = new decimal[5];
3.布尔类型
bool[] boolArray = new bool[5];
4.字符类型
char[] charArray = new char[5];
其中
char
类型用于存储单个字符。字符可以是字母、数字、符号或 Unicode 字符集中的任何字符。char
类型在内存中占用 2 个字节,并且是无符号的。
char
类型在需要处理单个字符的情况下非常有用,比如在字符串处理、字符分析或需要单独处理字符的应用场景中。
示例
char letter = 'A'; // 存储字母 A
char digit = '5'; // 存储数字 5
char symbol = '$'; // 存储美元符号
char whitespace = ' '; // 存储空格
char unicodeChar = '\u03A9';// 存储 Unicode 字符(希腊字母 Ω)
5.字节类型
byte[] by = new byte[5]
引用数据类型
1.字符串类型
string[] stringArray = new string[5];
2.对象类型
object[] objectArray = new object[5];
3.数组类型
也就是说数组套数组
int[][] jaggedArray = new int[5][];
例如
string[][] jaggedArray = new string[5][];
jaggedArray[0] = new string[] { "A991", "A992", "A993" };
jaggedArray[1] = new string[] { "B991", "B992", "B993", "B994" };
jaggedArray[2] = new string[] { "U991", "U992", "U993", "U994" };
像是五个一维数组的集合
4.类类型
MyClass[] classArray = new MyClass[5];
例如
public class Sensor
{
public int No { get; set; }
public double Temperature { get; set; }
}
//
static void Test3()
{
Sensor sensor = new Sensor();
sensor.No = 1;
sensor.Temperature = 25.6;//将来可以从下位机读取
Sensor[] sensorArray=new Sensor[2];
sensorArray[0] =new Sensor() { No=2,Temperature=26.7};
sensorArray[1] = new Sensor() { No = 3, Temperature = 27.7 };
Equipment4 equip = new Equipment4();
equip.CurrentSensor = sensor;
equip.SensorArray = sensorArray;
}
5.接口类型
IMyInterface[] interfaceArray = new IMyInterface[5];
特殊数据类型
1.动态类型
dynamic[] dynamicArray = new dynamic[5];
2.可空类型
int?[] nullableIntArray = new int?[5];
bool?[] nullableBoolArray = new bool?[5];
学习来源:C# 数组(Array) | 菜鸟教程
六、数组的属性和方法
讲完了如何声明和赋值一个数组,再来讲讲我们常用的对数组进行的操作
Array类是C#中所有数组的基类,位于System命名空间下。Array类提供了各种用于数组的属性和方法。我们通过使用Array的属性或方法实现对数组相应的操作。
输入in length =sensorArray.后,关键在数组名后面的·点,会自动出现Array类的属性和方法供我们使用。如下图所示。
经过我浅薄的分析知:扳手符号代表数组属性,正方体符号代表方法。所以对数组的操作的关键是常用的属性和方法。
常用的方法在下面链接:
学习来源:C# Array 类 | 菜鸟教程
七、扩展知识
多维数组
C#支持多维数组,多维数组也叫矩阵数组,声明方式如下:
//声明一个string变量的二维数组,如下
string [,] names;
//或者,声明一个int变量的三维数组,如下
int [ , , ] m;
二维数组
多维数组最简单的形式是二维数组。一个二维数组可以被认为是一个带有X行和Y列的表格,也可以理解为相应的矩阵。下面是一个二维数组,包括3行和4列:
因此,数组中每个元素是以a[ i , j ]的名称来标识的,其中a是数组名称,i和j是用于标识元素的下标,代表行和列。
初始化和访问二维数组
多维数组可以通过在括号内为每行指定值来进行初始化,读取时通过使用下标来访问。
int [,] a = new int [3,4] //初始化方式
{
{0, 1, 2, 3} , /* 初始化索引号为 0 的行 */
{4, 5, 6, 7} , /* 初始化索引号为 1 的行 */
{8, 9, 10, 11} /* 初始化索引号为 2 的行 */
};
int val = a[2,3];//**重要的访问格式
Console.WriteLine("val= {0}", val);
上面的聚集将获取数组中第3行第4个元素(因为数组的索引从0开始)。
交错数组
交错数组是数组的数组,也就是前面讲过的数组套数组。交错数组是一维数组。声明方式同数组类型数组,如下
string[][] jaggedArray
声明一个数组不会在内存中创建数组,初始化时创建:
string[][] jaggedArray = new string[5][];
jaggedArray[0] = new string[] { "A991", "A992", "A993" };
jaggedArray[1] = new string[] { "B991", "B992", "B993", "B994" };
jaggedArray[2] = new string[] { "U991", "U992", "U993", "U994" };
string pin = jaggedArray[0][0];//交错数组访问格式
Console.WriteLine("pin = {0}",pin);
Console.WriteLine("jaggedArray[0][0] = {0}",jaggedArray[0][0] );
其中,jaggeArray是由五个string类型数组成的数组,其中只填充了三个数组的内容:jaggedArray[0]是一个带有3个字符串的数组,jaggedArray[1]和jaggedArray[2]则是带有4个字符串数据的数组,jaggedArray[3]和jaggedArray[4]没有定义,内容为空。
参数数组
在C#中,可以传递数组作为函数的参数。通过指定不带索引的数组名称来给函数传递一个指向数组的指针。
下面的实例延时了如何传递数组给函数:
using System;
namespace ArrayApplication
{
class MyArray
{
double getAverage(int[] arr, int size)
{
int i;
double avg;
int sum = 0;
for (i = 0; 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[]{1000, 2, 3, 17, 50};
double avg;
/* 传递数组的指针作为参数 */
avg = app.getAverage(balance, 5 ) ;
/* 输出返回值 */
Console.WriteLine( "平均值是: {0} ", avg );
Console.ReadKey();
}
}
}
当上面的代码被编译和执行时,它会产生下列结果:
平均值是: 214.4
学习来源:
八、关于多维数组和交错数组的补充
关于多维数组、交错数组、数组类型数组异同看这里