数组能够按照一定规律把相关数据组织起来,通过索引或下标快速管理数据。
此外,C#中提供了ArrayList和HashTable两个类,分别为集合和哈希表,也可以存储多个数据。
一、一维数组
1.声明
type[] arrayName;
例如:int[] intArr;
2. 初始化
int[] arr = new int[5];
int[0] = 1;
int[1] = 2;
声明时初始化:
int[] arr = new int[5]{1,2,3,4,5};
声明数组时不初始化,但在对其初始化时必须使用new运算符
string[] strArr;
strArr = new string[7]{"Sun","Mon","Tue","Wed","Thu","Fri","Sat"};
声明数组时初始化时,可以省略new运算符和数组的长度,编译器将根据初始值的数量自动计算数组长度。这与上面并不冲突
string[] strArr = {"Sun","Mon","Tue","Wed","Thu","Fri","Sat"};
示例:
二. 二维数组
1. 声明
type[,] arrayName;
例如:生成一个2行2列的二维数组
int[,] arr = new int[2,2];
2. 初始化
int[,] arr = new int[2,2]{{1,2},{3,4}};
int[,] arr = new int[,]{{1,2},{3,4}}; //不指定行、列数
示例:声明3行2列的数组,并编程读取其维数
int[,] arr = new int[,] { {1,2},{3,4},{5,6}};
Console.WriteLine("行数为:{0}", arr.GetLength(0));
Console.WriteLine("列数为:{0}", arr.GetLength(1));
三、动态数组
动态数组实际上就是把数组的定义部分和初始化部分分别写在不同的语句中。
type[] arrName;
arrName = new type[n1,n2,..];
n1,n2 为数组的长度可以是整型常量或变量。 n1为第一维长度,n2为第二维长度。
示例
int m = 2;
int n = 3;
int[,] arr2 = new int[m,n];
四、数组操作
1. 遍历 foreach
2. 添加删除
删除是将后面的元素逐个提前,通常使用ArrayList完成的。
例如:删除第二个元素
int[] arr = new int[]{1,2,3,4,5};
int i = 1; //第二个,后面的提前
for(int i=n;i<arr.Length-1;i++){
arr[i] = arr[i+1];
}
3.方法 Sort Reverse
排序 Sort 类的静态方法。
int[] arr = new int[]{5,2,3,1};
Array.Sort(arr);
反转 Reverse 类的静态方法
五、ArrayList 集合
集合主要以线性结构存储数据。C#提供了集中集合类,如ArrayList、Quene、Stack等。
ArrayList类位于System.Collections 命名空间下,可以动态添加删除元素。
ArrayList相当于一种高级动态数组,是Array类的升级版,但并不等同于数组。
(1)数组容量固定,ArrayList的容量可以自动扩充。
(2)ArrayList提供添加、删除和插入某一范围元素的方法,但Array只能一次操作一个元素
(3)ArrayList提供将只读和固定大小包装返回到集合的放,数组不提供。
(4)ArrayList只能是一维的,而Array可以是多维的。
1.三种构造器
(1)public ArrayList();
以默认 16 的大小来初始化内部的数组。
ArrayList al = new ArrayList();
for(int i=0; i<10; i++)
al.Add(i);
(2) 用ICollection对象来构造,并用该集合的元素对其赋值
int[] arr = new int[]{1,2,3,4,5,6};
ArrayList al = new ArrayList(arr); //数组集合
(3)用指定的大小初始化
ArrayList al = new ArrayList(10);
for(int i=0;i<al.Count; i++)
2.常用属性
Capacity: 获取或设置ArrayList可包含元素数
Count:实际包含元素数
IsFixedSize:是否具有固定大小
IsReadOnly:是否只读
IsSynchronized:是否同步对ArrayList的访问
Item:获取或指定索引处的元素
SyncRoot:获取可用于同步ArrayList访问的对象。
3.常用方法
1. 添加 Add(object value)
2. 插入 Insert(int index, object value);
3. 删除
(1)Clear() 移除所有元素
(2)public virtual void Remove(Object obj);
示例:声明一个包含6个元素的一维数组,并用该数组实例化一个ArrayList对象,然后使用Remove方法从ArrayList对象中移除与3匹配的元素。
int[] arr = new int[]{1,2,3,4,5,6};
ArrayList al = new ArrayList(arr);
al.Remove(4);
(3)RemoveAt(int index);
删除指定索引位置处的元素
(4)RemoveRange(int index, int count)
移除一定范围的元素
4.遍历 foreach
5.查找
(1)Contains ,bool型,判断是否包含指定元素
(2)IndexOf 返回第一次出现指定元素的索引
(3)LastIndexOf 逆向搜索
六、Hashtable 哈希表
Hashtable用于表示键值对的集合,这些键值对根据键的哈希代码进行组织,每个元素都是一个存储于DictionaryEntry对象中的键值对。键不能为空引用,值可以。
1.构造函数
(1)public Hashtable()
使用默认的初始容量、默认加载因子、哈希代码提供程序和比较器来初始化HashTable类的新空实例。
(2)public Hashtable(int capacity)
指定初始容量
2.常用属性
Count :键值对数目
Keys :获取包含Hashtable键的ICollection
Values:获取包含Hasntable值的ICollection
3.常用方法
(1)添加 add
public virtual void Add(Object key, Object value);
(2)删除元素
clear:清空
Remove(object key):删除指定键的键值对
(3)遍历
foreach,注意类型用 DictionaryEntry
(4)查找
public virtual bool Contains(Object key);是否包含键,bool类型
public virtual bool ContainsValues(Object value); 是否包含值