有序列表

假设须要基于对全部集合排序,就能够使用SortedList<TKey,TValue>类.这个类依照键给元素排序.这个集合中的值和键都能够使用随意类型.

以下的样例创建了一个有序列表,当中键和值类型都是string.默认的构造函数创建了一个空列表,再用Add()方法加入书.使用重载的构造函数.能够定义列表的容量,传递实现了IComparer<TKey>接口的对象,该接口用于给列表中的元素排序.

使用Add(Tkey,Tvalue)方法,第一个參数是键,第二个參数是值.除了使用Add()方法之外,还能够使用索引器加入元素到列表中.索引器须要把键作为索引參数.假设键已存在,Add()方法就抛出一个ArgumentException类型的异常.假设所引起使用同样的键,就用新值取代旧值.

SortedList<TKey,TValue>类仅仅同意每一个键有一个相应的值,假设须要每一个键相应多个之,能够使用Lookup<TKey,TELement>类.

案例:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

namespace 有序列表

{

class Program

{

static void Main(string[] args)

{

//假设要用排好顺序的表,能够使用SortedList<TKey,TValue>来给元素排序

SortedList<string, string> books = new SortedList<string, string>();

books.Add("tangseng", "001");

books.Add("sunwukong", "002");

books.Add("zhubajie", "003");

books.Add("shaheshang", "004");

//键是不同意反复,以下我们用Add方法又一次加入一次tangseng

//books.Add("tangseng","hahah");抛出异常

//可是假设使用索引来赋值,假设键存在,则覆盖,不存在,相当于使用Add方法

books["tangseng"] = "hahaha";

foreach (var item in books.Keys)

{

Console.WriteLine(item);

}

foreach (var item in books.Values)

{

Console.WriteLine(item);

}

//一次性遍历键值

foreach (KeyValuePair<string, string> item in books)

{

Console.WriteLine("名字: {0} , 序号 : {1}", item.Key, item.Value);

}

/*

* 分析结果可知,tangseng被替换成了hahaha

*

* 以下简介一下SortedList<TKey,TValue>中的方法与属性

* Capacity 这个属性用来设置与得到有序列表的容量,与IList一样,也时成倍增长的

* Comparer 返回与有序列表相关的比較器,能够从构造函数中传入该比較器

* Remove() RemoveAt() 按键删除与按索引删除

* ContainsKey();ContainsValue;检查是不是有包括指定值的键,或者值

* TryGetValue() 尝试获得指定键的值,假设有就是true,并用out把值带回来,没有就是false

*/

//按键删除

Console.WriteLine("按键删除");

books.Remove("tangseng");

foreach (KeyValuePair<string, string> item in books)

{

Console.WriteLine("名字 : {0}, 序号 : {1}", item.Key, item.Value);

}

//能够看出tangseng被删除了

//以下我们按索引删除

books.RemoveAt(0);

Console.WriteLine("按索引删除");

foreach (KeyValuePair<string, string> item in books)

{

Console.WriteLine("名字 : {0}, 序号 : {1}", item.Key, item.Value);

}

//结果中看出shaheshang被删除,证明删除索引是以排序后的顺序为准,不是以插入的顺序为准

//检查是否包括tangseng,检查是否包括zhubajie(键)

Console.WriteLine("检查是否包括tangseng: {0}", books.ContainsKey("tangseng"));

Console.WriteLine("检查是否包括zhubajie: {0}", books.ContainsKey("zhubajie"));

//检查是否包括001,检查是否包括002(值)

Console.WriteLine("是否包括001: {0}", books.ContainsValue("001"));

Console.WriteLine("是否包括002: {0}", books.ContainsValue("002"));

//此处的索引值是按排序后的顺序

int keyIndex = books.IndexOfKey("zhubajie");

Console.WriteLine("zhubajie的索引值: {0}", keyIndex);

string value = "";

if (books.TryGetValue("tangseng",out value))

{

Console.WriteLine("得到了tangseng的值 : {0}",value);

}

string value2 = "";

if (books.TryGetValue("zhubajie", out value2))

{

Console.WriteLine("得到了zhubajie的值 : {0}", value2);

}

Console.ReadKey();

}

}

}

分析:使用Values和Keys属性訪问值和键.假设尝试使用索引器訪问一个元素,但所传递的键不存在,就会抛出异常.为了避免一场,能够使用ContainsKey()方法,假设所传递的键存在于集合中,这种方法返回true,也能够调用TryGetValue()方法,该方法尝试获得指定键的值.假设指定键相应的值不存在,该方法就会抛出异常.

C#高级编程五十二天----有序列表的更多相关文章

  1. C++面向对象高级编程(五)类与类之间的关系

    技术在于交流.沟通,转载请注明出处并保持作品的完整性. 本节主要介绍一下类与类之间的关系,也就是面向对象编程先介绍两个术语 Object Oriented Programming   OOP面向对象编 ...

  2. C#高级编程五十四天----Lookup类和有序字典

    Lookup类 Dictionary<Tkey,TValue>仅仅为每一个键支持一个值.新类Lookup<Tkey,TValue>是.NET3.5中新增的,它类似与Dictio ...

  3. C#高级编程五十八天----并行集合

    并行集合 对于并行任务,与其相关紧密的就是对一些共享资源,数据结构的并行訪问.常常要做的就是对一些队列进行加锁-解锁,然后运行类似插入,删除等等相互排斥操作. .NET4提供了一些封装好的支持并行操作 ...

  4. Unix环境高级编程(五)进程环境

    本章主要介绍了Unix进程环境,包含main函数是如何被调用的,命令行参数如何传递,存储方式布局,分配存储空间,环境变量,进程终止方法,全局跳转longjmp和setjmp函数及进程的资源限制. ma ...

  5. C#高级编程五十七天----位数组

    位数组 假设须要处理非常多位,就能够使用BitArray类和BitVector32.BitArray位于命名空间System.Collections中. BitVector32位于命名空间System ...

  6. C#高级编程八十二天----用户自己定义异常类

    用户自己定义异常类 前面已经说了不少关于异常的问题了,如今来给大家说一下自己定义异常时咋个回事以及咋样.   为啥会出现自己定义异常类呢? 用用脚趾头想想也明确,是为了定义咱们自己的异常,自己定义异常 ...

  7. html中有序列表标签ol,li的高级应用

    本文主要介绍html中有序列表标签ol,li的高级应用, 在网页设计时我们设计有序列表内容时,经常会在每个ITEM前手工加上一个数值,或是由程序加上这个数值. 而如果使用有序列表标签ol和li,则不需 ...

  8. C#编程(五十二)----------有序列表

    有序列表 如果需要基于对所有集合排序,就可以使用SortedList<TKey,TValue>类.这个类按照键给元素排序.这个集合中的值和键都可以使用任意类型. 下面的例子创建了一个有序列 ...

  9. (五) 一起学 Unix 环境高级编程 (APUE) 之 进程环境

    . . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编 ...

随机推荐

  1. leetcode_1011. Capacity To Ship Packages Within D Days_binary search二分

    https://leetcode.com/problems/capacity-to-ship-packages-within-d-days/ 传送带每天有最大传送量V,对于n个货物[w1,w2,w3. ...

  2. POI原生导入读取EXCEL

    好久没用 最近项目有冲突 所以又用到了这个 谁知道以后还会不会用 先记下来吧 直接扔项目里 调方法就OK 了. 记录一下....不想再写类似这样的东西了 import org.apache.poi.h ...

  3. 检查sql对象是否存在

    SQL Server判断对象是否存在   1 判断数据库是否存在 Sql代码  if exists (select * from sys.databases where name = '数据库名')  ...

  4. 字符串匹配算法之BM算法

    BM算法,全称是Boyer-Moore算法,1977年,德克萨斯大学的Robert S. Boyer教授和J Strother Moore教授发明了一种新的字符串匹配算法. BM算法定义了两个规则: ...

  5. 《BUG创造队》第五次作业:项目需求分析改进与系统设计

    项目 内容 这个作业属于哪个课程 2016级软件工程 这个作业的要求在哪里 实验九 团队作业5-团队项目需求改进与系统设计 团队名称 BUG创造队 作业学习目标 1.编写完整<软件需求规格说明书 ...

  6. 简述HTTP报文请求方法和状态响应码

    1. Method 请求方法,表明客户端希望服务器对资源执行的动作: 1.1 GET 向服务器请求资源. 1.2 HEAD 和GET方法的行为类似,但服务器在响应中只返回首部,不会返回实体的主体部分. ...

  7. 用LAMP构架创建DISCUZ论坛

    # rpm -q httpd mariadb mariadb-server php php-mysql # yum -y install httpd mariadb-server php php-my ...

  8. Python:用户自定义异常

    实际开发中,有时候系统提供的异常类型不能满足开发的需求.这时候你可以通过创建一个新的异常类来拥有自己的异常.异常类继承自 Exception 类,可以直接继承,或者间接继承. 1.自定义异常类型 #1 ...

  9. buf.fill()

    buf.fill(value[, offset[, end]][, encoding]) value {String} | {Buffer} | {Number} offset {Number} 默认 ...

  10. CURL PHP模拟浏览器get和post

    模拟浏览器get和post数据需要经常用到的类, 在这里收藏了几个不错的方法 方法一 <?php define ( 'IS_PROXY', true ); //是否启用代理 /* cookie文 ...