有序列表

如果需要基于对所有集合排序,就可以使用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. Gradle 1.12用户指南翻译——第五十二章. Maven 插件

    本文由CSDN博客貌似掉线翻译,其他章节的翻译请参见:http://blog.csdn.net/column/details/gradle-translation.html翻译项目请关注Github上 ...

  2. Java进阶(五十二)利用LOG4J生成服务日志

    Java进阶(五十二)利用LOG4J生成服务日志 前言 由于论文写作需求,需要进行流程挖掘.前提是需要有真实的事件日志数据.真实的事件日志数据可以用来发现.监控和提升业务流程. 为了获得真实的事件日志 ...

  3. SQL注入之Sqli-labs系列第五十关,第五十一关,第五十二关,第五十三关(ORDER BY堆叠注入)

    0x1第五十关 源码中使用的mysqli_multi_query()函数,而之前使用的是mysqli_query(),区别在于mysqli_multi_query()可以执行多个sql语句,而mysq ...

  4. “全栈2019”Java第五十二章:继承与初始化详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  5. 《手把手教你》系列技巧篇(五十二)-java+ selenium自动化测试-处理面包屑(详细教程)

    1.简介 面包屑(Breadcrumb),又称面包屑导航(BreadcrumbNavigation)这个概念来自童话故事"汉赛尔和格莱特",当汉赛尔和格莱特穿过森林时,不小心迷路了 ...

  6. Bristol大学密码学博士生的五十二个知识点

    Bristol大学密码学博士生的五十二个知识点 这个系列,是Bristol大学的密码安全工作组为密码学和信息安全相关的博士准备了52个基本知识点. 原地址:http://bristolcrypto.b ...

  7. 学习ASP.NET Core Razor 编程系列十二——在页面中增加校验

    学习ASP.NET Core Razor 编程系列目录 学习ASP.NET Core Razor 编程系列一 学习ASP.NET Core Razor 编程系列二——添加一个实体 学习ASP.NET ...

  8. 面渣逆袭:Redis连环五十二问,图文详解,这下面试稳了!

    大家好,我是老三,面渣逆袭系列继续,这节我们来搞定Redis--不会有人假期玩去了吧?不会吧? 基础 1.说说什么是Redis? Redis是一种基于键值对(key-value)的NoSQL数据库. ...

  9. abp(net core)+easyui+efcore实现仓储管理系统——出库管理之三(五十二)

    abp(net core)+easyui+efcore实现仓储管理系统目录 abp(net core)+easyui+efcore实现仓储管理系统--ABP总体介绍(一) abp(net core)+ ...

随机推荐

  1. 初识 Asp.Net数据验证控件

    在我们建立一个Asp.Net Web应用程序的时候我一般都会注意我们工具如图

  2. 【Git使用详解】Egit的常用操作详解

    常用操作 操作 说明 Fetch 从远程获取最新版本到本地,不会自动merge Merge 可以把一个分支标签或某个commit的修改合并现在的分支上 Pull 从远程获取最新版本并merge到本地相 ...

  3. python过滤 Kubernetes api数据

    一.需求分析 Kubernetes endpoints api地址 http://ip地址:端口/api/v1/namespaces/default/endpoints services api地址 ...

  4. js防止sql注入的参数过滤

    js防止sql注入的参数过滤 <script language="javascript"> <!-- var url = location.search; var ...

  5. AndroidManifest.xml中android:configChanges的简介

    程序在运行时,一些设备的配置可能会改变,如:横竖屏的切换.键盘的可用性等,这样的事情一发生,Activity会重新启动,其中的过程是:在销毁之前会先 called onSaveInstanceStat ...

  6. 【LOJ】#2181. 「SDOI2015」排序

    题解 还以为是啥毒瘤题 然后是个搜索题 复杂度算起来挺大 然后跑起来就连0.1ms不到= = 就是从大到小进行每种操作,搜出来一种操作就乘上一个操作数的阶乘就行 如果现在进行的操作操作\(2^i\)那 ...

  7. 【LOJ】#2268. 「SDOI2017」苹果树

    题解 显然权值都是正的,我们最深的那个点一定延伸到了某个叶子 我们抛去这条链之外再选K个点即可 如果直接对一棵树选K个点,满足这样的依赖关系,可以通过一个后序遍历的顺序做出来 转移方法是 \(dp[i ...

  8. shared_ptr(作为局部变量返回)

    智能指针:shared_ptr 1.一个局部的shared_ptr 作为返回值过程:当shared_ptr 被创建的时候,自身的引用计数 +1,当前引用计数为 1 , 按值返回以后 引用计数 + 1 ...

  9. 004.FTP匿名用户访问

    一 匿名用户配置项 [root@imxhy~]# vi /etc/vsftpd/vsftpd.conf anonymous_enable #允许匿名用户访问 anon_upload_enable #允 ...

  10. springmvc配置MappingJackson2HttpMessageConverter实现属性驼峰和下划线的转换

    需求 php调用java接口时,因为php那边的属性都是下划线风格,java这边的属性都是驼峰的风格.配置springmvc的json转换,在requestBody的时候(调用对象的set 方法)将j ...