为什么要引入集合?
因为数组有很多的局限性,以下举三个最主要的
1.数组只能存取相同类型的数据比如int数组只能存int类型的数据
2.数组存在大量的垃圾数据
3.数组不能动态的扩展长度
因为数组的局限性,所以引入集合的概念。
Hashtable ht = new Hashtable();
Hashtable 的数据都是以键值对的形式出现
ht.add("key","value"); 往Hashtable 中加入元素
通过key取value
console.WriteLine(ht["key"]);
通过一个key移除一个值
ht.Remove("key");
全部清除
ht.Clear();
索引器
索引器:
对于索引器,看起来有点像属性,同样有get,set方法,但是有区别
1.索引器必须是实例成员,也就是不能加static,属性可以是静态成员
2.索引器可以被重载,属性不可以
3.要使用this关键字来定义索引器
4.索引器不能用static修饰
索引器和数组比较:
(1)索引器的索引值(Index)类型不受限制
(2)索引器允许重载
(3)索引器不是一个变量
//这是我自己写的索引器
class Person//需要索引的类,保存字段
{
public int Age;
public string Name;
public int Id;
public Person(string name,int age,int id)
{
Age = age;Name = name;Id = id;
}
}
//泛型索引器,引用泛型是为了免去装箱和拆箱的操作
class PersonSelect{
Listlist<Person>= new List<Person>();//
//通过ID和年龄查找名字
public string this [int index, int age] {
set{ list.Add (new Person (value, age, index)); }
get {
foreach (Person p in list) {
if (p.Age == age && p.Id == index) {
return p.Name;
}
}
return "";
}
}
//通过名字和年龄查找ID
public int this[string name,int age]
{
get
{
foreach ( Person p in list) {
if (p.Name == name && p.Age == age) {
return p.Id;
}
}
return -1;
}
set{ list.Add (new Person (name, age, value));}
}
//还可以有更多的索引器
}
class MainClass
{
public static void Main (string[] args)
{
PersonSelect ps = new PersonSelect ();
ps [1, 2] = "A";
ps [2, 2] = "B";
ps [3, 3] = "C";
ps ["QQ", 1] = 2;
ps ["qq", 2] = 1;
Console.WriteLine (ps["QQ",1]+" "+ ps[1,2] + " "+ps["qq",2]);
}
}