数组的不足
我们在使用数组管理数据的时候,是需要预先知道数组的长度的。但是在我们实际的开发过程中,很多数据往往无法事先知道一共有多少,在面对这些数据的时候,就无法使用数组来进行管理了。
一、集合结构
C#中提供了一系列特殊功能的类,这些类可以存储任意类型的对象,并且长度是可变的,他们统称为集合。
在 C#编程语言中,集合结构有两种:泛型集合,非泛型集合。
泛型集合:只能存储固定类型的对象的一种集合。
要使用泛型集合,我们必须引入对应的命名空间:
System.Collections.Generic
二、List<T>介绍
List<T>是一个 C#内置的一个类,是类我们就可以实例化出对象,本质和数组一样,因为 List<T>这个类的内部其实是维护了一个数组。
但是 List<T>比数组灵活,这个类封装了很多方便我们操作这个内部数组的各种方法,我们可以方便的对数据进行增加,删除,修改等操作,且 List<T>的长度是可以动态改变的,在实例化 List<T>类型对象时,不需要指定长度。
三、List<T>基本使用
1.创建泛型集合
①首先引入命名空间:using System.Collections.Generic;
②List<类型> 集合名 = new List<类型>();
2.集合数据操作
①增加数据
集合名.Add(Value) //往集合中添加数据;
往集合中添加,数据会不断的添加到集合中,形成一种类似于排队的效果。
②查询数据
集合名[索引] //取出指定索引位置的数据;
List<T>的索引和数组一样,也是从 0 开始;
集合的长度可以通过“集合名.Count”这个属性来取得;
③删除数据
集合名.RemoveAt(索引) //删除指定索引位置的数据;
该索引位置的数据被删除后,该索引后面的数据的索引会自动被调整;
④修改数据
集合名[索引] = 新值; //给指定索引的的数据重新赋值;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Diagnostics;
namespace one
{
class Program
{
static void Main(string[] args)
{
//实例化一个集合
List<int> num = new List<int>();
num.Add(3);//往list里添加数据,类似于排队
num.Add(2);
num.Add(1);
Console.WriteLine(num[0]);//查询元素,索引从0开始
for (int i = 0; i < num.Count; i++)//循环访问
{
Console.WriteLine(num[i]);
}
num.Remove(2);//删除索引为2的值
num[1] = 100;//修改数据
}
}
}
四、List<T>管理对象
直接上代码了。。。
主程序:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Diagnostics;
namespace one
{
class Program
{
static void Main(string[] args)
{
//武器集合的定义
List<Weapon> werpons = new List<Weapon>();
//实例化一些武器
Weapon item = new Weapon(1, "长虹剑", 100);
werpons.Add(item);
werpons.Add(new Weapon(2, "冰魄剑", 99));
werpons.Add(new Weapon(2, "旋风剑", 98));
werpons.Add(new Weapon(2, "奔雷剑", 97));
//删除元素
werpons.RemoveAt(1);//根据索引删除
for(int i=0;i<werpons.Count;i++)//根据名字删除
{
if (werpons[i].Name == "旋风剑")
werpons.Remove(werpons[i]);
}
for (int i = 0; i < werpons.Count; i++)//查询显示list元素
{
Console.WriteLine(werpons[i]);
}
}
}
}
Weapon类:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace one
{
class Weapon
{
private int id;
private string name;
private int attack;
public int Id
{
get { return id; }
set { id = value; }
}
public string Name
{
get { return name; }
set { name = value; }
}
public int Attack
{
get { return attack; }
set { attack = value; }
}
public Weapon(int id,string name,int attack)
{
this.id = id;
this.name = name;
this.attack = attack;
}
public override string ToString()
{
return string.Format("id:{0}-name:{1}-attack:{2}", id, name, attack);
}
}
}