9、复杂数据类型
一、枚举
-
在namespace中声明
-
声明枚举 --> 创建一种类型
enum E_PlayerStates { idle = 0; walk; run; jump; swimming; } //默认的枚举值是从0开始自动赋值,若中途有赋值为i,后续赋值则为i+1 -
声明枚举变量 (创建一个自定义枚举类型的变量)
E_PlayerStates playerStates = E_playerStats.idle; -
枚举的类型转换
-
枚举与 int 互转——()强转
//枚举转换为int,值为定义时的具体指,默认从0递加 int i = (int)playerStates; //int转枚举,只能赋予枚举范围内的值 playerStates = 0; -
枚举与string互转
- Enum.Parse()方法
- 对象.toString()方法
f//枚举转string,调用toString方法,值为声明枚举时的字符串值 string str = playerStates.toString(); //string转枚举 playerStates = (E_PlayerStates)Enum.Parse(typeof(playerStates),"idle") //此处最后Parse函数返回的是一个Object类型的数据,所以最后需要用括号转换成需要的类型
-
-
枚举的作用
- 枚举在常用在表示各种状态,开发中经常和 Switch 配套使用,枚举的作用主要就是增强代码可读性
enum E_PlayerStates { idle; walk; run; jump; swimming; } E_PlayerStates playerStates = idle; Switch (playerStates) { case playerStates.idle: {//XXXXXX} break; case playerStates.walk: {//XXXXXX} break; }
二、数组
- 一维数组:arr[r]
- 二维数组:arr[r][c]
- 下标索引从 0 开始计数
1. 一维数组
-
一维数组的声明
//1.声明数组,必须在之后初始化 int[] arr0; //2.声明长度为5,未初始化 int[] arr1 = new int[5]; //3.声明长度为5,并且为其初始化,后大括号中的数据必须和长度相等 int[] arr2 = new int[5]{0, 1, 2, 3, 4, 5}; //4.声明长度为大括号中数据个数的数组,为其初始化 int[] arr3 = new int[]{1, 2, 3, 4, 5}; //5.声明长度为大括号中数据个数的数组,并为其初始化 int[] arr3 = {1, 2, 3, 4, 5}; -
一维数组的使用
-
通过下标获取元素
//注意下标不能越界 下标从0 ~ n-1 int i = arr[1]; -
修改指定元素
arr[0] = 123; -
获取数组长度
int length = arr.Length; -
遍历数组
for(int i = 0;i < arr.Length ; i++) { Console.WriteLine(arr[i]); } -
增加数组元素
//给arr[5]扩容成arr[6] int arr1[] = new int[6]; for (int i = 0; i < arr.Length; i++) { arr1[i] = arr[i]; } //最后将数组指针指向新数组,arr1会被gc机制自动回收 arr = arr1; -
删除数组元素
//删除arr[5]的最后一个元素 int arr2[] = new int[4]; for (int i = 0; i < arr2.Length; i++) { arr2[i] = arr[i]; } -
查找数组元素
//查找下标为3的元素值 for(int i = 0;i < arr.Length ; i++) { if(i == 3) Console.WriteLine(arr[i]); }
-
二维数组
-
二维数组的声明(N 维)
//变量类型[,] 二维数组变量名; int[,] arr; //申明过后 会在后面进行初始化 //变量类型[,] 二维数组变量名 = new 变量类型[行,列]; int[,] arr2 = new int[3, 3]; //变量类型[,] 二维数组变量名 = new 变量类型[行,列]{ {0行内容1, 0行内容2, 0行内容3.......}, {1行内容1, 1行内容2, 1行内容3.......}.... }; int[,] arr3 = new int[3, 3] { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } }; //变量类型[,] 二维数组变量名 = new 变量类型[,]{ {0行内容1, 0行内容2, 0行内容3.......}, {1行内容1, 1行内容2, 1行内容3.......}.... }; int[,] arr4 = new int[,] { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } }; //变量类型[,] 二维数组变量名 = { {0行内容1, 0行内容2, 0行内容3.......}, {1行内容1, 1行内容2, 1行内容3.......}.... }; int[,] arr5 = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } }; -
二维数组的使用
-
二维数组的长度
int [,] array = new int[2,2] {{1,1}, {2,2}}; //获取多少行 int row = array.GetLength(0); //获取多少列 int cpl = array.GetLength(1); -
获取二维数组的元素
//获取第一个元素,行列下标都是从0开始计数 int i = array[0,0]; -
修改二维数组中的元素
array[0, 0] = 99; -
遍历二维数组
for (int i = 0; i < array.GetLength(0); i++) { for (int j = 0; j < array.GetLength(1); j++) { Console.WriteLine(array[i, j]); } } -
增加数组的元素
//将array[2, 2]扩容为array[3, 3] int[,] array2 = new int[3, 3]; for (int i = 0; i < array.GetLength(0); i++) { for (int j = 0; j < array.GetLength(1); j++) { array2[i, j] = array[i, j]; } } //扩容完成,array指向新数组 array = array2; -
删除数组的元素
//将array[2, 2]缩小成为array[1, 1] int[,] array2 = new int[1, 1]; for (int i = 0; i < array2.GetLength(0); i++) { for (int j = 0; j < array2.GetLength(1); j++) { array2[i, j] = array[i, j]; } } //扩容完成,array指向新数组 array = array2;
-
-
交错数组
交错数组 是 数组的数组,每个维度的数量可以不同。基本不会用
//变量类型[][] 交错数组名; int[][] arr1; //变量类型[][] 交错数组名 = new 变量类型[行数][]; int[][] arr2 = new int[3][]; //变量类型[][] 交错数组名 = new 变量类型[行数][]{ 一维数组1, 一维数组2,........ }; int[][] arr3 = new int[3][] { new int[] { 1, 2, 3 }, new int[] { 1, 2 }, new int[] { 1 }}; //变量类型[][] 交错数组名 = new 变量类型[][]{ 一维数组1, 一维数组2,........ }; int[][] arr4 = new int[][] { new int[] { 1, 2, 3 }, new int[] { 1, 2 }, new int[] { 1 }}; //变量类型[][] 交错数组名 = { 一维数组1, 一维数组2,........ }; int[][] arr5 = { new int[] { 1, 2, 3 }, new int[] { 1, 2 }, new int[] { 1 }};int[][] array = { new int[] { 1,2,3}, new int[] { 4,5} }; //1.数组的长度 //行 Console.WriteLine(array.GetLength(0)); //得到某一行的列数 Console.WriteLine(array[0].Length); //2.获取交错数组中的元素 // 注意:不要越界 Console.WriteLine(array[0][1]); //3.修改交错数组中的元素 array[0][1] = 99; Console.WriteLine(array[0][1]); //4.遍历交错数组 for (int i = 0; i < array.GetLength(0); i++) { for (int j = 0; j < array[i].Length; j++) { Console.Write(array[i][j] + " "); } Console.WriteLine(); }