美文网首页
C#(21)集合 字典 索引器

C#(21)集合 字典 索引器

作者: cGunsNRoses | 来源:发表于2017-10-10 14:02 被阅读0次

    9yue6

    集合(Collection

    一、集合的作用:

    有两种方式可以将对象分组:

    1、创建对象数组  2、创建对象集合

    数组的初始化必须要固定数量,即数组的长度。

    集合提供一种灵活的处理方法。与数组不同,处理的对象

    组可根据程序更改的需要动态地增长和收缩。 对于某些集

    合,您可以为放入该集合的任何对象分配一个“键”,以

    便使用该键快速检索对象。

    集合是类,因此必须声明新集合后,才能向该集合中

    添加元素。

    1、创建对象数组

    集合分为两种类型:非泛型集合和泛型集合。

    使用非泛型集合的 需引入:System.Collections命名空间。

    使用泛型集合需引入:System.Collections.Generic命名空间

    (非泛型相比泛型效率较低因为要进行装箱拆箱操作

    Stack

    定义:

    Stack stack = new Stack();

    Stack<int> stackInt = new Stack();

    可以重写堆栈

    publicclass MyStack:Stack{

    override

    }

    Stack类成员介绍

    Push()将对象插入Stack的顶部(入栈)推入元素

    Pop()移除并返回Stack顶部的对象(出栈)弹出元素

    Peek()返回位于Stack顶部的对象,但不移除

    Contains确定某元素是够在Stack中

    Clear()从Stack中移除所有对象

    Count获取Stack中包含的元素

    入栈Push

    stack.Push();

    出栈Pop

    intnumber = (int)stack.Pop();

    objectobj = stack.Pop ();

    Console.WriteLine();

    获取栈顶元素Peek

    objectobj_1 = stack.Pop();//区别

    Console.WriteLine(obj_1);

    objectobj_2 = stack.Peek ();

    Console.WriteLine(obj_2);

    是否包含某个元素

    stack.Contains("1");

    转为数组

    object[]objs =stack.ToArray();

    获取栈的长度

    intcount =stack.Count;

    for(int i = 0; i < count; i++) {

    stack.Pop();

    }

    队列Queue

    Queue成员

    同样也实现了ICollection和IEnumerable

    Enqueue()将对象添加到Queue的结尾处

    Dequeue()移除并返回Queue开始处的对象

    其他和Stack没有区别

    Queue总结

    1.先进先出(FIFO)的一种数据结构。

    2.随着向Queue 中添加元素,容量通过重新分配按需自动增加。

    可通过调用 TrimToSize 来减少容量。

    3.Queue 接受 null 作为有效值并且允许重复的元素。

    4.在AI寻路算法中经常用的Queue。

    入队列

    queue.Enqueue("li");

    queue_2.Enqueue(1);

    出队列

    objectobj =queue.Dequeue();

    intnumber =queue_2.Dequeue ();

    获取队列头部元素

    objectobj_1 =queue.Peek();

    intnumber_1 =queue_2.Peek ();

    Console.WriteLine(obj_1);

    Console.WriteLine(number_1);

    队列元素个数

    queue_2.Count;

    queue.Count;

    移除多余空间

    queue.TrimToSize();

    Console.WriteLine(queue.Count);

    查阅MSDN练习堆栈,队列中的ToArrayCopyTo

    Dictionary字典

    Dictionary(TKey,TValue)类称为字典类

    TKey表示键的类型

    TValue表示字典中的值类型

    Dictionary类实现了ICollection、IEnumerable、IDictionary·接口。


    字典定义如下:

    Dictionary<string,int >dic = new Dictionary<string,int>();

    字典中键必须是唯一的,不是所有类型都可以是键(一般是string int),

    所有类型都可以作为值

    总结:

    字典是一个泛型集合

    TKey必须唯一,Value可以是变量,也可以是对象


    例子:

    Dictionary dic = new Dictionary();

    dic.Add("One",1);//一组键值对

    dic.Add("Two",2);

    intnumber = dic ["One"];

    dic["One"] = 31;

    intnumber_2 = dic ["One"];

    Console.WriteLine(number);

    Console.WriteLine(number_2);

    Dictionary strDic = new Dictionary();

    strDic["Li"]= "an";//自动Add

    strDic["Li"]= "sa";

    strDic["Li"] = null;//可以存空对象

    Console.WriteLine(strDic.Count);

    通过键移除对应的值

    strDic.Remove("Li");

    Console.WriteLine(strDic.Count);

    是否包含键/值

    if(dic.ContainsKey ("Two")) {

    Console.WriteLine("包含Two键");

    }

    if(dic.ContainsValue(2)) {

    Console.WriteLine("包含2值");

    }

    打印键值对

    foreach(string key in dic.Keys){

    Console.WriteLine(key + ":"+dic[key]);

    }

    foreach(int value in dic.Values){

    Console.WriteLine("value: "+value);

    }

    用户输入10个姓名,可以重复输入同一个姓名,输出每个姓名,并输出每个姓名输入的多少次

    Dictionary dicName = new Dictionary();

    Console.WriteLine("输入十次姓名");

    for(int i = 0; i <= 10; i++) {

    stringstr = Console.ReadLine ();

    if(dicName.ContainsKey (str)) {

    dicName[str] += 1;

    }else {

    dicName[str] = 1;

    }

    }

    foreach(string name in dicName.Keys) {

    Console.WriteLine(name+"出现为"+dicName[name]);

    }

    AarryList

    (非泛型相比泛型效率较低因为要进行装箱拆箱操作

    ArrayList是一个特殊的数组。通过添加和删除元素,就

    可以动态改变数组的长度

    ArrayList并不是强类型,ArrayList 可能并不总是提供特定任务的最佳性能。

    ArrayList类实现了IList、ICollection和IEnumerable接

    口。


    int[]numbers = {1,23,4,5,11,44};

    ArrayList arrayList = new ArrayList (numbers );//默认为一个长度为0的数组

    Add添加

    arrayList.Add("Wo");

    arrayList.AddRange(new int []{9,8,7});

    Remove移除

    arrayList.Remove(23);//元素

    arrayList.RemoveAt(2);//位置

    arrayList.RemoveRange(1,2);//从下标1开始数两为得到逆序数组

    arrayList.Reverse();//(可以写一个范围的逆序)

    两个对象作比较

    arrayList.Equals();

    从下标2开始往后截取两位

    ArrayListarr = arrayList.GetRange (2, 2);

    查找数组元素下标(在数组中的第一个)

    intfirstIndex = arrayList.IndexOf("Wo");

    intlastIndex = arrayList.LastIndexOf ("Wo");

    插入元素/数组

    arrayList.Insert();

    arrayList.InsertRange();

    更改元素

    arrayList.SetRange(2,new string []{"la","do","bili"});

    遍历集合

    foreach(object obj in arrayList) {

    Console.Write(obj+" ");

    }

    ArrayList总结:

    1.支持自动改变大小的功能。

    2.可以灵活的插入元素、删除元素、访问元素。

    3.不是强类型,速度跟数组比起来要慢。

    相对于ArraryList而言,List在大多数情况下执行更好,更安全

    如果对类型T只用值类型的话,比较速度得考虑装箱开箱的问题

    List(泛型)

    List类表示可通过索引访问的对象的强类型列表。 提供用于对列表进行搜索、排序和操作的方法。List是ArrayList类的泛型等效类,该类使用大小可按需动态增加的数组实现IList泛型接口。List类同样也是实现了

    ICollection、IEnumerable和IList接口。

    例子:

    Listnumbers = new List (new int[]{12,3,44,1,15,2});

    排序

    numbers.Sort();

    foreach(int n in numbers ) {

    Console.WriteLine(n);

    }

    自学Hashtable和SortedList。

    索引器

    (索引器可以重载


    总结:

    1.数据类型是表示将要存取的数组或集合元素的类型。

    2.索引器类型表示该索引器使用哪一类型的索引来存取

    数组或集合元素,可以是整数,可以是字符串;

    this表示操作本对象的数组或集合成员,可以简单把它理解成索引器的名字,因此索引器不能具有用户定义的名称.


    创建一个索引器,对类里面的字典进行数据的存取,用来记录学生的姓名和分数


    归纳:

    Stack于Queue有什么区别。

    Dictionary有什么优点?

    ArrayList和List的比较。

    相关文章

      网友评论

          本文标题:C#(21)集合 字典 索引器

          本文链接:https://www.haomeiwen.com/subject/aqmvjxtx.html