美文网首页
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)集合 字典 索引器

    9yue6 集合(Collection 一、集合的作用: 有两种方式可以将对象分组: 1、创建对象数组 2、创建对...

  • C#中数组、集合(ArrayList)、泛型集合List

    C#中数组、集合(ArrayList)、泛型集合List、字典(dictionary

  • 字典,集合,有序字典

    字典 新建字典 1、 2、 常用操作 索引 新增 删除 键、值、键值对 循环 长度 集合 有序字典 。。。

  • C#中数组、集合(ArrayList)、泛型集合List

    C#中数组、集合(ArrayList)、泛型集合List、字典(dictionary)全面对比 为什么把这4个东西...

  • 10月23日C#学习总结

    今天学习了属性、索引器、继承 属性:C#不直接访问类的数据,通过访问器访问(get,set)。 索引器:索引器(i...

  • Python基础手册13——映射(字典)

    映射 映射表示由任意索引集索引的有限的,无序的,键不重复的对象集合。目前有一种映射类型:字典。 一、字典 一个字典...

  • 字典类型和操作

    字典类型的概念 /字典是包含0个或多个键值对的集合,没有长度限制,可以根据键索引值的内容. /映射是一种键(索引)...

  • C#索引器

    索引器(Indexer) 允许一个对象可以像数组一样被索引。当您为类定义一个索引器时,该类的行为就会像一个 虚拟数...

  • 集合

    集合 集合(set)的特点 无序性(用{}都没有索引) 互异性 确定性——集合中的元素不能有可变对象,如列表、字典...

  • 江南小碧的C#教程:4、各种集合类与循环

    C#的集合类中包括列表、字典和其他常用的数据类型。 列表 C#中比较类似于Python里的list的数据类型是Ar...

网友评论

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

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