有序列表

假设须要基于对全部集合排序,就能够使用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()方法,该方法尝试获得指定键的值.假设指定键相应的值不存在,该方法就会抛出异常.

最新文章

  1. spring boot(四):thymeleaf使用详解
  2. android中 onResume()方法什么时候执行 ??(转)
  3. JS写入日志
  4. php-fpm进程数优化
  5. iOS学习32之UIKit框架-可视化编程-XIB
  6. js实现checkbox的全选/取消
  7. hdu 5090 Game with Pearls
  8. WebService什么?
  9. Android Studio没有导包快捷键怎么办
  10. C#中关于WebBrowser的一些细节设置
  11. Java内存模型四
  12. MAC下安装MAMP的Mongodb
  13. python全栈开发 * 继承性 层叠性 盒模型 标准文档流 * 180809
  14. python自动化工具之pywinauto(一个实例)结合pyuserinput
  15. 学习笔记-AngularJs(八)
  16. [CB]2018年中国智能手机市场出货量
  17. 2017-2018-1 20155208 课堂测试(ch06)(补做)
  18. 基于WMI获取本机真实网卡物理地址和IP地址
  19. PostgreSQL内核分析——BTree索引
  20. mp3转speex的一些研究(貌似不能播放,暂存着)

热门文章

  1. 上POJ刷题
  2. CAD参数绘制点(网页版)
  3. Java Servlet 非英文乱码
  4. 08CSS边框边距
  5. OpenCV2:应用篇 QT+OpenCV实现图片编辑器
  6. No-5.变量的命名
  7. 笔试算法题(29):判断元素范围1到N的数组是否有重复数字 &amp; 计算整数的7倍
  8. [Python3网络爬虫开发实战] 1.2.3-ChromeDriver的安装
  9. assert.doesNotThrow()
  10. leetcode-88合并两个有序数组