设为首页收藏本站【C#】第五章 值类型枚举与引用类型数组
繁体中文

单小喏中文网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

单小喏中文网欢迎你的光临!!!
查看: 3922009|回复: 0

【C#】第五章 值类型枚举与引用类型数组

[复制链接]

85

主题

89

帖子

1246

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1246

来自- 安徽合肥

扫一扫,手机访问本帖
发表于 2014-3-25 19:12:10 | 显示全部楼层 |阅读模式
|安徽合肥
早在前面我们讲解变量的定义过程中,我们说过变量就是在内存随机开辟一个空间,按照相应的数据类型把值。
这个空间和值我们称为变量。开辟过程如图
值类型枚举与饮用类型数组.jpg

但是,开辟空间的地址、大小我们无法确定,像上图中红色圆圈部位会造成内存资源浪费和不好管理。由此,
提出高效的使用内存的解决方案:
枚举:(Enum)
在内存中划分一个连续的空间,然后放制定数据类型的常量值。开辟如下图
值类型枚举与饮用类型数组.jpg

相对于图1,枚举类型使用内存的效率要高得多。接下来看下如何使用代码创建及使用枚举
[C#] 纯文本查看 复制代码
enum Colors {Blue,Yellow,Green,Red }; //定义并赋值枚举
//使用的方式,直接是 枚举名.值
 Console.WriteLine("你选择的颜色为:"+Colors.Green);


也可以用整型来获取枚举的值。确切的说是每个枚举空间所对应值的序号(从0开始,这个顺序我们称为索引
[C#] 纯文本查看 复制代码
 Console.WriteLine("你选择的颜色为:" + (int)Colors.Yellow); //看看输出的值


值类型枚举与饮用类型数组.jpg

在使用枚举的过程中,我们会发现:
1、枚举的长度不好控制
2、保存的数据类型也不好控制
3、保存的值,我们也不好去随意的修改
使用数组(array)可以解决上面的问题。
定义数组
int[] arr1=new int[5];//开辟5个连续的空间,放整型的值
数组赋值
arr1[0]=1;
arr1[1]=2;
arr1[2]=3;
arr1[3]=4;
arr1[4]=5;
[C#] 纯文本查看 复制代码
//定义空间为5个的连续整型数组
            int[] arr1 = new int[5];//指明开辟连续空间个数,不能省略。
            //数组赋值
            arr1[0] = 1;
            arr1[1] = 2;
            arr1[2] = 3;
            arr1[3] = 4;
            //arr1[4] = 5;
            Console.WriteLine("取第三个空间的值:"+arr1[2]);
            //修改对应空间的值,并重新输出
            arr1[2] = 999;
            Console.WriteLine("再次取第三个空间的值:" + arr1[2]);
            Console.WriteLine("输出没有放值的空间:"+arr1[4]);//没有赋值的整型(数值型没有赋值)默认为0,字符串默认为null,不是""


再定义字符串数组,如图
值类型枚举与饮用类型数组.jpg

[C#] 纯文本查看 复制代码
string[] arr2 = new string[5] { "a", "b", "c", "d", "e" };//可以一次性定义并赋值,此行代码可以简化为
            // string[] arr2 = { "a", "b", "c", "d", "e" };
            //下面2行代码出错,单独定义,下面重新赋值不行。,原因是数组是引用类型(是用new关键字就是开辟新空间了)
            // string[] arr2;
            //arr2 = { "a", "b", "c", "d", "e" };


值类型枚举与饮用类型数组.jpg

可以一次性把数组里所有的值全部取出来
[C#] 纯文本查看 复制代码
//可以一次性把数组里所有的值全部取出来
            for (int i = 0; i < arr2.Length; i++)//数组变量.Length获取数组的长度
            {
                Console.WriteLine(arr2[i]);
            }


上面是按照索引来取值,也可以使用高级FOR循环(前面我们说过专用于数组)来一次性取值
[C#] 纯文本查看 复制代码
//取数组arr1的值
            foreach (int item in arr1)
            {
                Console.WriteLine(item);
            }
            //取数组arr2的值
            foreach (string item2 in arr2)
            {
                Console.WriteLine(item2);
            }


好了,按照我们所说的基本概念实现作业:
定义一个整型数组长度为5,接受用户输入5个数值,对其进行排序,分别输出排序前、后相应的值。
二维数组:
把数组中每个小空间再划分为几个小格子保存,形成的像二维表格一样保存数据。这样的数据我们成为二维数组。
值类型枚举与引用数组.jpg

语法如下
[C#] 纯文本查看 复制代码
//定义名为arr的3行3列二维整型数组
            int[,] arr = new int[3, 3];
            //分别赋值
            arr[0, 0] = 1;
            arr[0, 1] = 2;
            arr[0, 2] = 3;
            arr[1, 0] = 4;
            arr[1, 1] = 5;
            arr[1, 2] = 6;
            arr[2, 0] = 7;
            arr[2, 1] = 8;
            arr[2, 2] = 9;
            //arr[2, 3] = 1;//超出索引,出现索引越界异常。
            //取指定1行1列的值
            Console.WriteLine(arr[1, 1]);
            //一次性取出所有的值
            for (int i = 0; i < 3; i++)
            {
                for (int j = 0; j < 3; j++)
                {
                    Console.Write(arr[i, j] + "\t");
                }
                Console.WriteLine();
            }
            //再定义一个字符串二维数组
            //string[,] arr1=new string[2,2]{{"a","b"},{"c","d"}};
            //string[,] arr1 = { { "a", "b" }, { "c", "d" } };
            string[,] arr1 = { { "a", "b","aa" }, { "c", "d" } };//二维数组有一个缺陷,就是要保证每行每列的值个数都要一致。
            for (int i = 0; i < 2; i++)
            {
                for (int j = 0; j < 2; j++)
                {
                    Console.Write(arr1[i, j] + "\t");
                }
                Console.WriteLine();
            }


二维数组有个缺陷:,就是要保证每行每列的值个数都要一致;而且,在后面放满了值继续放值是放不了的!
针对于二维数组,改进办法,使用交错数组。
值类型枚举与引用数组.jpg

[C#] 纯文本查看 复制代码
//定义外面的交错数组,行数必须要指定,列数可以不指定
            int[][] arr1=new int[3][];
            //交错数组赋值
            arr1[0]=new int[2]{1,2};
            arr1[1] = new int[3] { 3,4,5};
            arr1[2] = new int[1] { 6};
            //根据理解,交错数组一次性取值只能用foreach
            foreach (int[] item in arr1)//每一行是一个数组
            {
                foreach (int item1 in item)
                {
                    Console.Write(item1+"\t");
                }
                Console.WriteLine();
            }





上一篇:【C#】第四章 异常处理与调测
下一篇:【C#】第六章 方法之自定义方法

帖子地址: 



+1
3922009°C
沙发哦 ^ ^ 马上
*滑动验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

 
发评论,即可赢取积分欧!

申请友链|意见反馈|小黑屋|手机版|Archiver|单小喏中文网 ( 皖ICP备13012632号-1 |网站地图  

GMT+8, 2016-12-8 17:51 , Processed in 0.270817 second(s), 51 queries .

Powered by danxiaonuo

© 2013-2016 danxiaonuo.

快速回复 返回顶部 返回列表