Unity系统班之第十二课

2021-04-08 19:06发布

一、集合之Stack

Stack叫做栈,是一种数据结构,遵循后进先出原则,只能在一端对数据进行插入和删除,入栈和出栈          
LIFO  last in first out          

普通栈
Stack stack = new Stack();
泛型栈
Stack<People> stackPeople = new Stack<People >();
People p1 = new People("大黄", 18);
People p2= new People("中黄", 19);
People p3 = new People("小黄", 29);
People p4 = new People("小小黄", 99);
Console.WriteLine("stackPeople数量:"+stackPeople.Count);

如同装子弹般先进后出

stackPeople.Push(p3);
stackPeople.Push(p2);
stackPeople.Push(p4);
stackPeople.Push(p1);
获取stack中的长度
Console.WriteLine("stackPeople数量:" + stackPeople.Count);
取出stack中的一个对象但是并不删除
 People p=  stackPeople.Peek();
Console.WriteLine("Peek姓名:"+p.Name);
Console.WriteLine("Peek之后的数量:"+stackPeople.Count);

p = stackPeople.Pop();
Console.WriteLine("Pop之后的数量:"+stackPeople.Count);

判断参数是否在栈中存在,如果存在返回true,否则返回false
bool isContains= stackPeople.Contains(p1);
Console.WriteLine("isContains:"+isContains);

移除栈中所有对象
stackPeople.Clear();
Console.WriteLine("Clear之后的数量:" + stackPeople.Count);

二、 集合之Queue

队列,只能在一端插入数据和删除,当插入数据时入队.取出数据时叫出队.
先进的先出,后进的后出

 Stack<People> stackPeople = new Stack<People>();
People p1 = new People("大黄", 18);
People p2 = new People("中黄", 19);
People p3 = new People("小黄", 29);
People p4 = new People("小小黄", 99);

Queue queue = new Queue();
queue.Enqueue(12);
queue.Enqueue(p2);

Queue<People> que = new Queue<People>();
Console.WriteLine("队列的对象个数: "+que.Count);
向队列的尾部插入数据
que.Enqueue(p2);
que.Enqueue(p3);
que.Enqueue(p4);
que.Enqueue(p1);
Console.WriteLine("队列的对象个数为:"   +que.Count);

取一条数据并且从队列中移除
People pe= que.Peek();
Console.WriteLine("Peek名字:  "+pe.Name);
Console.WriteLine("Dequeue之后队列的对象个数"+que.Count);

判断一个数据在队列中是否存在,存在返回true,不存在返回false
bool isContains = que.Contains(p3);
Console.WriteLine("isContains:  "+isContains);

删除队列中所有数据
que.Clear();
Console.WriteLine("Clear之后队列的对象个数:  "+que.Count);

for (int i = 0; i < que.Count; i++)
{
    pe = que.Peek();
    Console.WriteLine("Dequeue名字:   "+pe.Name);
}
while (que.Count>0)
{
    pe = que.Peek();
    Console.WriteLine("Dequeue名字:   " + pe.Name);
}

三、集合之字典

字典是采用键值的方式存储数据,取数据时速度更快

People p1 = new People("大黄", 18);
People p2 = new People("中黄", 19);
People p3 = new People("小黄", 29);
People p4 = new People("大大黄", 99);
People p5 = new People("小小黄", 99);

Dictionary<string, People> dics = new Dictionary<string, People>();

向字典中存数据,key值不允许重复,但是value值可以重复
dics.Add(p1.Name, p1 );
dics.Add(p2.Name, p2);
dics.Add(p3.Name, p3);
dics.Add(p4.Name, p4);
dics.Add(p5.Name, p5);

People pe= dics[p5.Name];
Console.WriteLine("姓名:{0},年龄:{1}",pe.Name,pe.Age);

foreach (KeyValuePair<string,People> item in dics)
{
    Console.WriteLine($"{item.Key},{item.Value.Name},{item.Value.Age}");
}

判断字典中是否包含指定的键值
Console.WriteLine(dics.ContainsKey("大大黄"));
判断字典中是否包含指定的value值
Console.WriteLine(dics.ContainsValue(p1));

移除字典中某一个值
如果实参在字典的键值中存在,那么移除对应的数据,返回true,否则返回false
Console.WriteLine(dics.Remove("大大"));

dics.Remove("大大黄");
foreach (KeyValuePair<string, People> item in dics)
{
    Console.WriteLine($"{item.Key},{item.Value.Name},{item.Value.Age}");
}
清除字典中所有的数据
dics.Clear();
Console.WriteLine(dics.Count);

四、哈希表

People people = new People("大黄", 98);
Hashtable table = new Hashtable();
table.Add("大黄",people);
table.Add(123, "中黄");

foreach (DictionaryEntry item in table)
{
    Console.WriteLine($"{item.Key},{item.Value}");
    People pe = item.Value as People;
    if (pe!=null)
    {
        Console.WriteLine(pe.Name+" "+pe.Age);
    }
}

五、ArrayList和List<T>

People p1 = new People("大黄", 18);
People p2 = new People("中黄", 19);
People p3 = new People("小黄", 29);
People p4 = new People("小小黄", 99);
People p5 = new People("大大黄", 99);

List<People> peoples = new List<People>();
//向链表中添加数据
peoples.Add(p1);
peoples.Add(p2);
peoples.Add(p3);
peoples.Add(p4);
peoples.Add(p5);

foreach (var item in peoples)
{
    Console.WriteLine(item.Name +"  "+item.Age);
}

List<People> peoples = new List<People>
{
    //向链表中添加数据
    p1,
    p2,
    p3,
    p4,
    p5
};
foreach (var item in peoples)
{
    Console.WriteLine(item.Name + "  " + item.Age);
}

遍历链表
for (int i = 0; i < peoples.Count; i++)
{
    Console.WriteLine(peoples[i].Name+" "+peoples[i].Age);
}

删除链表中的指定数据,如果存在那么删除并返回true,不存在则返回false
peoples.Remove(p3);

peoples.RemoveRange(0, 2);
Console.WriteLine(peoples[0].Name + " " + peoples[0].Age);

Console.WriteLine(peoples.Contains(p3));

对链表中的数据进行排序
peoples.Sort();
peoples.Reverse();
foreach (var item in peoples)
{
    Console.WriteLine(item.Name + "  " + item.Age);
}

六、索引器

索引器可以让我们通过对象向访问数组一样访问对象中的属性或字段

People people = new People("大黄",18);
people[0] = "小黄";
people[1] = "90";

Console.WriteLine(people[0]+"   "+people[1]);


心得体会:

     暂无!!!