C#学习笔记(三)

第3讲ArrayList
 
 C#语言并不支持动态数组,如果需要使用到动态数组,则可以使用ArrayList来代替。
  PPT:ArrayList位于System.Collections命名空间中
也就是说我们要使用ArrayList必须要在程序开头引入using System.Collections命名空间。
  PPT:ArrayList对象是较为复杂的数组。ArrayList类提供了Array类未提供的一些功能。
  下面我们来看一下ArrayList和Array的之间的区别:
  PPT:Array的容量是固定的,而ArrayList的容量可根据需要自动扩充。
也就是说Array在它的生存期不能改变它的存储容量,而ArrayList在生存期可以根据随意变更大小。
  PPT:ArrayList提供添加,插入或移除某一范围元素的方法。在Array中,只能一次获取或设置一个元素的值。
ArrayList的使用更加方便。
  PPT:Array可以具有多个维度,而ArrayList始终只是一维的。
  下面我们用一个例子来简单的介绍ArrayList的使用方法。代码如下:
  1. using System;
  2. //引入使用ArrayList的命名空间
  3. using System.Collections;

  4. class ArrList
  5. {
  6.     //声明一个Main的入口函数
  7.     static void Main()
  8.     {
  9.         //new了一个ArrayList的对象实例arr
  10.         ArrayList arr = new ArrayList();
  11.         //声明了一个字符串对象str1
  12.         string str1;
  13.         //使用while循环,条件为true
  14.         //条件为true的话,必然循环中有break跳出循环关键字
  15.         while (true)
  16.         {
  17.             //屏幕上输出一行字,请输入一个字符串元素给ArrayList
  18.             Console.WriteLine("Please add a string to ArrayList:");
  19.             //等待用户输入,将输入的值以字符串的方式赋值给str1变量
  20.             str1 = Console.ReadLine();
  21.             //假如我们输入end字符串,执行break语句跳出循环,结束程序
  22.             if (str1 == "end")
  23.             {
  24.                 break;
  25.             }
  26.             //通过Add添加函数将str1的内容添加到ArrayList的实例arr中
  27.             arr.Add(str1);
  28.             Console.WriteLine();
  29.             for (int i = 0; i < arr.Count; i++)
  30.                 //打印arr中的元素
  31.                 Console.Write("{0}  ", arr[i]);
  32.             //打印一个换行符/n
  33.             Console.WriteLine("/n");
  34.             //然后继续循环,继续等待用户输入下一个想要加入arr的字符串元素
  35.             //直到用户输入end字符结束程序
  36.         }
  37.     }
  38. }
  好,我们进行编译执行。

  我们连续输入了4个字符串元素,元素是My name is John这4个。并且在屏幕上打印了出来。这时候再输入end,我们可以看到程序结束了。由于打印了end程序执行了break语句就退出执行。
  通过这个例子我们可以看到ArrayList的容量是在不断地改变的。它实现了动态数组的功能。而且,它的访问方法跟数组时一样的,都是使用下标读取。ArrayList我们就简单的介绍到这里。如果大家还想了解更多的话,可以去MSDN上进行查找相关的知识。(在线的也有,很方便)
  下面我们来介绍一下多维数组。
  1. int[] a1;//整数类型的一维数组
  2. int[,] a2;//整数类型的二维数组
  3. int[,] a2 = new int[2,3];
  4. int[,] a2 = new int[,]{{1,2,3},{4,5,6}};

  5. int[,,] a3;//整数类型的三维数组
  6. int[,,] a3 = new int[10,20,30]; 
  第一行代码 int [] a1; 一维数组我们前一讲已经演示过。第二行 int [,] a2;声明了一个整数类型的二维数组,二维数组和一维数组的声明唯一不同的是在方括号中间增加了个逗号,这表示它是个二维数组。
int [,] a2 =  new   int [2,3];这里演示了如何声明并初始化一个二维数组,在new这个二维数组的时候,给它的空间设定为2乘3,也就是说它的个数是2×3等于6个。
int [,] a2 =  new   int [,]{{1,2,3},{4,5,6}};这里不但声明并初始化一个二维数组a2,而且给它赋了初值123 456,换句话说它也是一个2乘3的二维数组。
int [,,] a3;这行代码声明了一个三维数组,与二维数组声明不同的只是方括号里多了个逗号。
int [,,] a3 =  new   int [10,20,30];这是对三维数组的初始化,把它的空间设定为10×20×30;
  接下来我们来看C#语言里面比较奇怪的数组,它就是数组的数组。
  1. int[][] j2; //不规则数组:数组的数组
  2. int[][] j2 = new int[3][];
  3. j2[0] = new int[]{1,2,3};
  4. j2[1] = new int[]{1,2,3,4,5,6};
  5. j2[2] = new int[]{1,2,3,4,5,6,7,8,9};

  6. int[][][] j3; //数组的数组的数组
我们看第一行代码int [][] j2;它有点类似于C语言里面的二维数组的声明,但是它并不是二维数组,它是一个不规则的数组,或者叫数组的数组。
int [][] j2 =  new   int [3][];首先声明了一个不规则数组j2,并对它进行了初始化。这里很奇怪,它只规定了这个不规则数组的第一维度的空间大小为3,对第二个维度大小并没给出具体的规定,换句话说,第二个维度的空间的大小是不确定的。确定了j2的长度后,就可以对其赋初值了。
j2[0] =  new   int []{1,2,3};j2的第一个元素看上去像是一维数组的第一个元素,但它却代表了一个一维数组。j2[0]代表一个长度为3的一维数组。
j2[1] =  new   int []{1,2,3,4,5,6};代表一个长度为6的一维数组。
j2[2] =  new   int []{1,2,3,4,5,6,7,8,9};代表一个长度为9的一维数组。
也就是说j2不规则数组的三个元素的长度各不相同,它可以存放长度不同的一维数组。
int [][][] j3;是一个数组的数组的数组,在这里就不作详细的介绍了。
  我们来看一下数字矩阵的一个示例:
arr
0~5
0~3
11
12
13
14
15
16
21
22
23
24
25
26
31
32
33
34
35
36
41
42
43
44
45
46
这是一个4行6列的数字矩阵,它分为4行用0,1,2,3来表示,6列用0,1,2,3,4,5来表示。如果在程序中要使用这么一个数字矩阵,放在什么地方才最方便我们的调用呢?我们可以马上可以想到可以把它放在二维数组中是最方便的。
  下面我们就用一个例子来演示,如何把这个数字矩阵放到二维数组中去并调用它。代码如下:
  1. using System;
  2. class Matrix
  3. {
  4.     static void Main()
  5.     {
  6.         //声明了一个4乘6的二维数组arr
  7.         int[,] arr = new int[4, 6];
  8.         //这使用了嵌套的循环,对arr赋值
  9.         for(int i = 0;i < 4; i++)
  10.         {
  11.             for (int j = 0; j < 6; j++)
  12.             {
  13.                 //arr赋值
  14.                 //把第一个维度加上1乘以10作为它的十位数
  15.                 //j加上1作为arr的个位数
  16.                 arr[i, j] = (i + 1) * 10 + j + 1;
  17.             }
  18.         }
  19.         //将数组打印出来
  20.         for (int i = 0; i < 4; i++)
  21.         {
  22.             for (int j = 0; j < 6; j++)
  23.             {
  24.                 Console.Write("{0}   ", arr[i, j]);
  25.             }
  26.             //打印一行换行
  27.             Console.WriteLine();
  28.         }    
  29.     }
  30. }
我们编译执行下程序,如图:

这个4行6列的数字矩阵被打印了出来,跟我们上面表格上的数字矩阵是不是一模一样
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值