一维数组
概述:数组是通过指定数组的元素类型、数组的(秩)维数及数组每个维度上的上限和下限来定义的,及一个数组的定义需要包含以下几个要素。
类型 数组的维数 每个维的上限下限
声明:数据类型 标识符 【正整数常量】;
数组类型是从抽象基类型Array派生的引用类型,通过new运算符创建数组并将数组元素初始化为它们的默认值。
一维数组的声明和使用:
静态一维数组:
它是指数组元素的个数是固定不变的,即它们占用的内存空间大小是不变的。
一维数组是具有相同数据类型的一维数据类型的集合。
声明如下:type[ ] arrayName;
初始化有很多方法:
1. int[ ] arr = new int[5];
2. int[ ] arr = new int[5]{1,2,3,4,5};
3. string[ ] arrstr;
arrstr = new striing[7]{“sun”,”Mon”,”Tue”,”Wed”,”Thu”,”Fir”,”Sat”};
动态一维数组
动态数组的声明实际上就是将数组的声明部分和初始化部分,分别写在不同的语句中,动态数组的初始化也需要使用new关键字为数组元素非配内存空间,为数组元素赋初值。
动态一维数组元素的声明如下:
type [ ] arrayName;
arrayName = new type[n];
或
type[ ] arrayname = new type[ ];
对动态一维数组声明完以后,可以利用Length属性获取数组中元素的总数,并用for语句或foreach语句对数组进行动态赋值。
二维数组:
静态二维数组:
声明语法如下:
type[,] arrayName;
注:定义值类型的数组时,其默认值为0(包括整形,单精度,双精度),布尔类型默认值为false,字符数组默认值为’\0’,字符串默认值为null。
在声明二维数组的同时直接进行初始化,可以省略new关键字,编译器将根据初始值的数量计算数组长度,并创建二维数组。
动态二维数组:
声明语法如下:
Type[ , ] arrayName;
arrayName = new type[n1,n2];
或:
Type[ , ] arrayName = new type[n1,n2];
对动态二维数组声明完以后,可以通过给Array类对象的GetLength方法传递不同的参数,来获取二维数组的行数和列数,从而获取到二维数组中的每个元素。
1 static void Main(string[] args) 2 { 3 /* 4 int[] arr = new int[6]; 5 Console.WriteLine("请输入一维数组:"); 6 for (int i = 0; i < arr.Length; i++) 7 { 8 arr[i] = Convert.ToInt32(Console.ReadLine()); 9 } 10 Console.WriteLine("显示输入的数组:"); 11 foreach (int item in arr) 12 { 13 Console.Write("{0}",item+","); 14 } 15 Console.WriteLine(); 16 */ 17 18 /* 19 int[,] arr = new int[3, 2] {{1,1},{2,2},{3,3} }; 20 Console.Write("数组的行数为:"); 21 Console.WriteLine(arr.GetLength(0)); 22 Console.Write("数组的列数为:"); 23 Console.WriteLine(arr.GetLength(1)); 24 Console.Write("\n"); 25 for (int i = 0; i < arr.GetLength(0); i++) 26 { 27 string str = ""; 28 for (int j = 0; j < arr.GetLength(1); j++) 29 { 30 str = str + Convert.ToString(arr[i, j]) + " "; 31 } 32 Console.Write(str); 33 Console.Write("\n"); 34 } 35 */ 36 /* 37 int row = 0, col = 0; 38 Console.Write("请输入二维数组的行数:"); 39 row = Convert.ToInt32((Console.ReadLine())); 40 Console.Write("请输入二维数组的列数:"); 41 col = Convert.ToInt32((Console.ReadLine())); 42 43 Console.WriteLine("请输入二维数组的值:"); 44 int[,] arr1 = new int[row, col]; 45 for (int i = 0; i < arr1.GetLength(0); i++) 46 { 47 for (int j = 0; j <arr1.GetLength(1); j++) 48 { 49 arr1[i, j] = Convert.ToInt32((Console.ReadLine())); 50 } 51 } 52 53 //显示 54 Console.WriteLine("显示输入的二维数组:"); 55 for (int i = 0; i < arr1.GetLength(0); i++) 56 { 57 for (int j = 0; j < arr1.GetLength(1); j++) 58 { 59 Console.Write(arr1[i,j]+" "); 60 } 61 Console.WriteLine(); 62 } 63 */ 64 65 /* 66 // 冒泡排序 67 int[] arr = new int[]{1,4,3,5,7,2,6,10,9,8}; 68 int temp; 69 Console.Write("排序前:"); 70 foreach (int item in arr) 71 { 72 Console.Write(item+" "); 73 } 74 Console.WriteLine(); 75 Console.Write("排序后:"); 76 for (int i = 0; i < arr.Length-1; i++) 77 { 78 for (int j = i+1; j < arr.Length; j++) 79 { 80 if (arr[i] > arr[j]) 81 { 82 temp = arr[j]; 83 arr[j] = arr[i]; 84 arr[i] = temp; 85 } 86 } 87 } 88 foreach (int item in arr) 89 { 90 Console.Write(item+" "); 91 } 92 */ 93 94 /* 95 // 选择排序 96 int[] arr = new int[] { 10,2,3,6,4,9,8,1,5,7}; 97 Console.Write("排序前:"); 98 foreach (int item in arr) 99 { 100 Console.Write(item+" "); 101 } 102 Console.WriteLine(); 103 Console.Write("排序后:"); 104 int min; 105 for (int i = 0; i < arr.Length-1; i++) 106 { 107 min = i; 108 for (int j = i+1; j < arr.Length; j++) 109 { 110 if (arr[min] > arr[j]) 111 min = j; 112 } 113 int temp = arr[i]; 114 arr[i] = arr[min]; 115 arr[min] = temp; 116 } 117 foreach (int item in arr) 118 { 119 Console.Write(item+" "); 120 } 121 */ 122 123 Console.WriteLine(); 124 Console.ReadLine(); 125 }
ArrayList集合类:
ArrayList集合位于System.Collections命名空间下,它可以动态的添加和删除元素,是一种非泛型集合类。ArrayList相当于一种高级的动态数组,它是Array类的升级版本,但它并不等同于数组。
ArrayList类概述:
1、数组的容量是固定的,而ArrayList的容量可以根据需要自动扩充
2、ArrayList提供添加、删除和插入某一范围元素的方法,但在数组中自能一次获取或设置一个元素的值。
3、ArrayList将提供只读和固定大小包装返回到集合的方法,而数组不提供。
4、ArrayList只是一维形式,而数组可以是多维的。
其属性如下:
Capacity |
获取或设置 ArrayList 可包含的元素数。 |
Count |
获取 ArrayList 中实际包含的元素数。 |
IsFixedSize |
获取一个值,该值指示 ArrayList 是否具有固定大小。 |
IsReadOnly |
获取一个值,该值指示 ArrayList 是否为只读。 |
IsSynchronized |
获取一个值,该值指示是否同步对 ArrayList 的访问(线程安全)。 |
Item |
获取或设置指定索引处的元素。 |
SyncRoot |
获取可用于同步 ArrayList 访问的对象。 |
方法:
添加:
public virtual int Add (object value);
public virtual void Insert(int index,object value);
删除:
public virtual void Clear(); //清除所有元素
public virtual void Remove(); //移除特定对象的第一个匹配项
public virtual void RemoveAt(int index);//移除指定索引处的元素
public virtual void RemoveRange(int index,int count);//移除指定索引处的元素
index:起始索引
count:要移除的元素数