C#高级编程五十二天----有序列表
有序列表
假设须要基于对全部集合排序,就能够使用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#高级编程五十二天----有序列表的更多相关文章
- C++面向对象高级编程(五)类与类之间的关系
技术在于交流.沟通,转载请注明出处并保持作品的完整性. 本节主要介绍一下类与类之间的关系,也就是面向对象编程先介绍两个术语 Object Oriented Programming OOP面向对象编 ...
- C#高级编程五十四天----Lookup类和有序字典
Lookup类 Dictionary<Tkey,TValue>仅仅为每一个键支持一个值.新类Lookup<Tkey,TValue>是.NET3.5中新增的,它类似与Dictio ...
- C#高级编程五十八天----并行集合
并行集合 对于并行任务,与其相关紧密的就是对一些共享资源,数据结构的并行訪问.常常要做的就是对一些队列进行加锁-解锁,然后运行类似插入,删除等等相互排斥操作. .NET4提供了一些封装好的支持并行操作 ...
- Unix环境高级编程(五)进程环境
本章主要介绍了Unix进程环境,包含main函数是如何被调用的,命令行参数如何传递,存储方式布局,分配存储空间,环境变量,进程终止方法,全局跳转longjmp和setjmp函数及进程的资源限制. ma ...
- C#高级编程五十七天----位数组
位数组 假设须要处理非常多位,就能够使用BitArray类和BitVector32.BitArray位于命名空间System.Collections中. BitVector32位于命名空间System ...
- C#高级编程八十二天----用户自己定义异常类
用户自己定义异常类 前面已经说了不少关于异常的问题了,如今来给大家说一下自己定义异常时咋个回事以及咋样. 为啥会出现自己定义异常类呢? 用用脚趾头想想也明确,是为了定义咱们自己的异常,自己定义异常 ...
- html中有序列表标签ol,li的高级应用
本文主要介绍html中有序列表标签ol,li的高级应用, 在网页设计时我们设计有序列表内容时,经常会在每个ITEM前手工加上一个数值,或是由程序加上这个数值. 而如果使用有序列表标签ol和li,则不需 ...
- C#编程(五十二)----------有序列表
有序列表 如果需要基于对所有集合排序,就可以使用SortedList<TKey,TValue>类.这个类按照键给元素排序.这个集合中的值和键都可以使用任意类型. 下面的例子创建了一个有序列 ...
- (五) 一起学 Unix 环境高级编程 (APUE) 之 进程环境
. . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编 ...
随机推荐
- leetcode_357. Count Numbers with Unique Digits
https://leetcode.com/problems/count-numbers-with-unique-digits/ 给定一个n,计算[0,10^n]中十进制中每一位都不相同的数的数目. c ...
- MySQL(MMM架构使用)
本案例要求基于普通版的MySQL服务器改造MMM架构,完成以下任务操作:启动MMM集群架构设置集群中服务器为online状态MySQL-MMM架构部署完成后需要启动,数据库端启动mmm-agent进程 ...
- JavaSE-17 泛型
学习要点 泛型接口 泛型类 泛型方法 多参数泛型类 泛型类的继承 泛型的定义 允许在定义类.接口.方法时使用类型形参,类型形参将会在声明变量.创建对象或者调用方法时候动态指定. 泛型接口 1 定义 ...
- hdfs深入:06、hdfs的写入过程
7.HDFS的文件写入过程 详细步骤解析: 1. client发起文件上传请求,通过RPC与NameNode建立通讯,NameNode检查目标文件是否已存在,父目录是否存在,返回是否可以上传: 2. ...
- Myeclipse中dubug调试出现参数显示的框
1.步骤: window>show view>variables 结果:
- 牛客网提高组第二场---solution
T1 方差 根据题目要求将式子先写出来注意下面式子中的 $n$ 全部都是 $n-1$$$\begin{aligned}ans&=n^2\times \frac{1}{n}\times \sum ...
- BZOJ 2039 人员雇佣 二元关系 最小割
题面太长了,请各位自行品尝—>人员雇佣 分析: 借用题解的描述: a.选择每个人有一个代价Ai b.如果有两个人同时选择就可以获得收益Ei,j c.如果一个人选择另一个不选会产生代价Ei,j 这 ...
- Windows——bat中的路径和工具栏运行bat的坑
工具栏添加的批处理环境 编写一个简单的批处理文件 set testEnv = %cd% pause 这里第一句:设置当前文件夹路径为环境变量testEnv的值 这里第二句:暂停命令窗口 第一次我们直接 ...
- eclipse 导入svn项目并添加server
1.打开svn资源库 window-->show view-->other-->svn-->svn资源库 2.控制台选中文件夹右键-->检出为--finish 3.添加服 ...
- 基于nvm的Node、NPM的版本管理(NPM permission error的解决)
最近在使用npm过程中,发现全局安装总会遇到permission相关的错误,所以总是要在前面加sudo,还得不停输入密码. 懒惰使我进步,随手google了一下相关问题的解决方案,发现npm在官方文档 ...