一.概述

复杂数据(变量)类型

特点:

数据集合:一般是多个数据(变量)集合在一起构成的数据

自定义:一般可以自己取名字,可以自定义的数据(变量)

1.枚举

整型常量的集合,可以自定义

2.数组

任意变量类型的顺序存储的数据

3.结构体

任意变量的数据集合,可以自定义

二.枚举

1.基本概念

(1)枚举是什么

 枚举是一个比较特别的存在

它是一个被命名的整型常量的集合

一般用于表示状态 类型 等等

(2)申明枚举和申明枚举变量

注意:申明枚举和申明枚举变量时两个概念

申明枚举: 相当于是创建了一个自定义的枚举类型

申明枚举变量: 使用申明的自定义枚举类型  创建了一个枚举变量

(3)申明枚举语法

枚举名  以E或者E_开头  作为我们的命名规范

enum E_自定义枚举名

{

        自定义枚举项名字0,

        自定义枚举项名字1,

        自定义枚举项名字2,

}

枚举中包裹的整型常量,第一个默认为0,下面的会以此增加1。

比如自定义枚举项名字0没有赋值,默认为0;自定义枚举项名字1也没有赋值就默认为1;自定义枚举项名字同理为2。

如果:

enum E_自定义枚举名

{

        自定义枚举项名字0  = 5,

        自定义枚举项名字1,——> 6

        自定义枚举项名字2 = 100,

        自定义枚举项名字3,——>101

        自定义枚举项名字4,——>102

}

是根据上一个常量的值默认累加1;

enum E_number 
{
    a = 5,
    b,
    c = 100,
    d,
    e,
}

Console.WriteLine(E_number.b);
Console.WriteLine(E_number.d);
Console.WriteLine(E_number.e);

2.在哪里申明枚举

namespace语句块中(常用)

class语句块中和struct语句块中

枚举不能在函数语句块中申明

3.枚举的使用

申明枚举变量

自定义的枚举类型  变量名  =  默认值;(自定义的枚举类型.枚举项)

enum E_PlayerType
{
    Main,
    Other,
}
E_PlayerType playerType = E_PlayerType.Main;
if(playerType == E_PlayerType.Main)
{
    Console.WriteLine("主玩家逻辑");
}
else
{
    Console.WriteLine("其他玩家逻辑");
}

枚举和switch语句是天生一对

enum E_number
{
    a,
    b,
    c,
    d,
    e,
}

E_number number = E_number.a;
switch(number)
{
    case E_number.a:
        break;
    case E_number.b:
        break;
    case E_number.c:
        break;
    case E_number.d:
        break;
    case E_number.e:
        break;
}

4.枚举的类型转换

(1)枚举和int转换

enum E_PlayerType
{
    Main,
    Other,
}
E_PlayerType playerType = E_PlayerType.Main;
int i = (int)playerType;
Console.WriteLine(i);

(2)枚举和string转换

enum E_PlayerType
{
    Main,
    Other,
}
E_PlayerType playerType = E_PlayerType.Main;
string str = playerType.ToString();
Console.WriteLine(str);

//Parse后,第一个参数:你要转的为的枚举类型,第二个参数:用于转换的对应枚举项的字符串
playerType = (E_PlayerType)Enum.Parse(typeof(E_PlayerType),"other");
Console.WriteLine(playerType);

5.枚举的作用

在游戏开发中,对象很多时候会有很多的状态

比如玩家会有一个动作状态,我们需要用一个变量或者标识 来表示当前玩家处于的是哪种状态

综合考虑,可能会使用int 来表示他的状态

1 行走 2 待机 3 跑步 4 跳跃 …… 等等

枚举可以帮我们清晰的分清楚状态的含义

三.数组

1.一维数组

(1)基本概念

数组是存储一组相同类型数据的集合

数组分为一维、多维、交错数组

一般情况下,一维数组被简称为数组

(2)数组的申明

①变量类型[ ]        数组名;

只是申明了,但没有申请内存空间  

变量类型可以是我们学过的或者没学过的所有变量类型

int[] arr1;

②变量类型[ ]         数组名        =        new        变量类型[ 数组的长度 ];

这种方式申明数组,相当于申请了五个内存空间,但内存空间里的int值,默认为0

int[] arr2 = new int[5];

③变量类型[ ]         数组名        =        new        变量类型[ 数组的长度 ]{内容1,内容2,内容3,……};

大括号内的内容数量要和数组长度一样,一一对应

int[] arr3 = new int[5]{1,2,3,4,5};

④变量类型[ ]         数组名        =        new        变量类型[ ]{内容1,内容2,内容3,……};

相当于只申明了数组的内存位置,没有申请空间大小,空间大小有后面的大括号的内容数量决定,也决定了数组长度

int[] arr4 = new int[]{1,2,3,4};

⑤变量类型[ ]         数组名        =        {内容1,内容2,内容3,……};

int[] arr5 = {1,2,3,4};

(3)数组的使用

int[] array = {1,2,3,4,5};

//1数组的长度
//数组变量名.Length
Console.WriteLine(array.Length);

Console.WriteLine("******************");
//2获取数组中的元素
//数组中的下标和索引,是从0开始的
//通过索引下标去获取数组中的元素是,不能越界
Console.WriteLine(array[0]);
Console.WriteLine(array[2]);
Console.WriteLine(array[4]);

Console.WriteLine("******************");
//3修改数组中的元素
array[0] = 99;
Console.WriteLine(array[0]);

Console.WriteLine("******************");
//4遍历数组
for(int i = 0;i < array.Length; i++)
{
    Console.WriteLine(array[i]);
}

Console.WriteLine("******************");
//5增加数组中的元素
//数组初始化后是不能直接添加新的元素的
int[] array2 = new int[6];
for(int i = 0;i < array.Length; i++)
{
    array2[i] = array[i];
}
array = array2;
array[5] = 999;
for(int i = 0;i < array.Length; i++)
{
    Console.WriteLine(array[i]);
}

Console.WriteLine("******************");
//6删除数组中的元素
int[] array3 = new int[4];
for(int i = 0;i < array3.Length; i++)
{
    array3[i] = array[i];
}
array = array3;
for(int i = 0;i < array.Length; i++)
{
    Console.WriteLine(array[i]);
}

Console.WriteLine("******************");
//7查找数组中的元素
//只能通过遍历数组,才能确定,数组中是否存储了目标元素
int a = 3;
for(int i = 0;i < array.Length; i++)
{
    if(a == array[i])
    {
        Console.WriteLine("与a相等的元素在数组索引为{0}的位置",i);
    }
}

2.二维数组

(1)基本概念

二维数组是使用两个下标(索引)来确定元素的数组

两个下标可以理解为行标和列标

比如矩阵

1        2        3

4        5        6

可以用二维数组 int[ 2 , 3 ] 表示

好比两行三列的数据集合

(2)二维数组的申请

①变量类型[ , ]        二维数组变量名;

只是申明了,但没有申请内存空间 ,申明后,后面需要进行初始化

int[,] arr;

②变量类型[ , ]         二维数组数组名        =        new        变量类型[ 行,列 ];

int[,] arr2 = new int[3,3];

这种方式申明数组,相当于申请了三行三列的内存空间,但内存空间里的int值,默认为0

③变量类型[ , ]         二维数组数组名        =        new        变量类型[ 行,列 ]{ {0行0列,0行1列,0行2列,……}, {1行0列,1行1列,1行2列,……}, {2行0列,2行1列,2行2列,……}…… };

int[,] arr3 = new int[3,3]{{1,2,3},
                           {4,5,6},
                           {7,8,9}} ;

④变量类型[ , ]         二维数组数组名        =        new        变量类型[ ,]{ {0行0列,0行1列,0行2列,……}, {1行0列,1行1列,1行2列,……}, {2行0列,2行1列,2行2列,……}…… };

int[,] arr4 = new int[,]{{1,2,3},
                         {4,5,6},
                         {7,8,9}} ;

⑤变量类型[ , ]         二维数组数组名        = { {0行0列,0行1列,0行2列,……}, {1行0列,1行1列,1行2列,……}, {2行0列,2行1列,2行2列,……}…… };

int[,] arr5 = {{1,2,3},
               {4,5,6},
               {7,8,9}} ;

(3)二维数组的使用

int[,] array = new int[,]{{1,2,3},
                          {4,5,6}};

//1.二维数组的长度
//我们要分别获取二维数组的行数和列数
Console.WriteLine("二维数组的长度");
Console.WriteLine(array.GetLength(0));
Console.WriteLine(array.GetLength(1));


//2.获取二维数组中的元素
Console.WriteLine("获取二维数组中的元素");
Console.WriteLine(array[0,1]);
Console.WriteLine(array[1,2]);


//3.修改二维数组中的元素
Console.WriteLine("修改二维数组中的元素");
array[0,1] = 99;
Console.WriteLine(array[0,1]);

//4.遍历二维数组
Console.WriteLine("遍历二维数组");
for(int i = 0 ; i < array.GetLength(0); i++)
{
    for(int j = 0; j < array.GetLength(1); j++)
    {
        Console.Write(array[i,j]+"  ");
    }
    Console.WriteLine(" ");
}

//5.增加二维数组中的元素
Console.WriteLine("增加二维数组中的元素");
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 = array2;
array[2,0] = 7;
array[2,1] = 8;
array[2,2] = 9;
for(int i = 0 ; i < array.GetLength(0); i++)
{
    for(int j = 0; j < array.GetLength(1); j++)
    {
        Console.Write(array[i,j]+"  ");
    }
    Console.WriteLine(" ");
}


//6.删除二维数组中的元素
Console.WriteLine("删除二维数组中的元素");
int[,] array3 = new int[3,2];
for(int i = 0 ; i < array3.GetLength(0); i++)
{
    for(int j = 0; j < array3.GetLength(1); j++)
    {
        array3[i,j] = array[i,j];
    }
}
array = array3;
for(int i = 0 ; i < array.GetLength(0); i++)
{
    for(int j = 0; j < array.GetLength(1); j++)
    {
        Console.Write(array[i,j]+"  ");
    }
    Console.WriteLine(" ");
}


//7.查找二维数组中的元素
Console.WriteLine("查找二维数组中的元素");
int a = 7;
for(int i = 0 ; i < array.GetLength(0); i++)
{
    for(int j = 0; j < array.GetLength(1); j++)
    {
        if(array[i,j] == a)
        {
            Console.WriteLine("与a相等的元素在二维数组索引为[{0},{1}]的位置",i,j);
        }
    }
}

3.交错数组(非重点知识)

(1)基本概念

交错数组是数组的数组,每个维度的数量可以不同

注意:二维数组的每行的列数相同,交错数组每行的列数可能不同

(2)交错数组的申请

①变量类型[ ][ ]        交错数组名;

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} };

(3)交错数组的使用

int[][] array ={ new int[]{1,2,3},
                 new int[]{4,5},
                 new int[]{6} };

//1.交错数组的长度
//我们要分别获取二维数组的行数和列数
Console.WriteLine("交错数组的长度");
//行
Console.WriteLine(array.GetLength(0));
//列(得到某一行的列数)
Console.WriteLine(array[0].Length);


//2.获取交错数组中的元素
Console.WriteLine("获取交错数组中的元素");
Console.WriteLine(array[0][1]);
Console.WriteLine(array[2][0]);


//3.修改交错数组中的元素
Console.WriteLine("修改交错数组中的元素");
array[0][1] = 99;
Console.WriteLine(array[0][1]);

//4.遍历交错数组
Console.WriteLine("遍历交错数组");
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(" ");
}

Visual Studio可运行

//5.增加交错数组中的元素
int[][] array = {new int[]{1, 2, 3},
                 new int[]{4, 5},
                 new int[]{6}};

Console.WriteLine("增加交错数组中的元素");

int[][] array2 = {new int[3],
                  new int[2],
                  new int[1],
                  new int[4]};

for (int i = 0; i < array.GetLength(0); i++)
{
    for (int j = 0; j < array[i].Length; j++)
    {
        array2[i][j] = array[i][j];
    }
}

array = array2;

array[3][0] = 7;
array[3][1] = 8;
array[3][2] = 9;
array[3][3] = 10;

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();
}
//6.删除j交错数组中的元素
int[][] array ={ new int[]{1,2,3},
                 new int[]{4,5},
                 new int[]{6} };
Console.WriteLine("删除交错数组中的元素");
int[][] array3 ={ new int[3],
                  new int[2]};
for (int i = 0; i < array3.GetLength(0); i++)
{
    for (int j = 0; j < array3[i].Length; j++)
    {
        array3[i][j] = array[i][j];
    }
}
array = array3;
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(" ");
}
//7.查找交错数组中的元素
int[][] array ={ new int[]{1,2,3},
                 new int[]{4,5},
                 new int[]{6} };
Console.WriteLine("查找交错数组中的元素");
int a = 5;
for (int i = 0; i < array.GetLength(0); i++)
{
    for (int j = 0; j < array[i].Length; j++)
    {
        if (array[i][j] == a)
        {
            Console.WriteLine("与a相等的元素在交错数组索引为[{0},{1}]的位置", i, j);
        }
    }
}

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐