C#语言基础-11 字典/集/有序集合/不变的集合

字典 Dictionary<TKey,TValue>

字典允许按照某个键来访问元素。字典也称为映射或散列表。
  字典的主要特性是能根据键快速查找值。添加到字典中的键会转换为一个散列,利用散列创建一个数字,它将索引和值关联起来。

          Person p1 = new Person();
            p1.Age = 1;
            Dictionary<string,Person> dic = new Dictionary<string, Person>();
            Dictionary<string, Person> dic1 = new Dictionary<string, Person>(10);//指定元素数量的初始化
            Dictionary<string, Person> dic2 = new Dictionary<string, Person>(dic);//指定元素的初始化

            dic.Add("Liu", p1);//添加元素
            dic["Liu1"] = p1;//添加元素

            bool isOk = dic.ContainsKey("Liu");//验证key是否存在
            isOk = dic.ContainsValue(p1);//验证value是否存在

            Person p10 = dic["Liu2"];//获取数据 Key必须在字典中存在,否则抛出异常

集 HashSet<T> SortSet<T>
   包含不重复元素的集合称为集。HashSet<T>包含不重复元素的无序列表,SortSet<T>包含不重复元素的有序列表。
   提供的方法可以创建合集、交集,或者给出一个集是另一个集的超集或子集的信息。

            Person p1 = new Person();
            p1.Age = 1;
            Person p2 = new Person();
            p2.Age = 12;
            Person p3 = new Person();
            p3.Age = 12;
            List<Person> ls = new List<Person>() { p1 };

            HashSet<Person> hs = new HashSet<Person>();
            HashSet<Person> hs1 = new HashSet<Person>(hs);
            HashSet<Person> hs2 = new HashSet<Person>(ls);

            bool isOk = hs.Add(p1);//添加元素,如果集中没有,添加到集中并返回ture,否则返回false。
            isOk = hs.Add(p1); //返回 false,因为已经添加过
            hs.Remove(p1);//删除元素

            isOk = hs.IsSubsetOf(hs1);//验证hs是否是hs2的子集
            isOk = hs.IsSupersetOf(hs1);//验证hs是否是hs2的超集

            hs.UnionWith(hs1);//合集。保留两个集合中的全部数据,重复的保留1份
            hs.IntersectWith(hs1);//并集。保留两个集合中都存在的数据
            hs.ExceptWith(hs1);//移除交集。移除指定集合中的数据

有序列表 SortList<TKey,TValue>
  需要基于键对所需集合排序,使用SortList<TKey,TValue>类。
  SortList<TKey,TValue>每个键只允许对应一个值,如果想对应多个值,使用LookUp<TKey,TElement>类。

            Person p1 = new Person();
            p1.Age = 1;
            SortedList<string, Person> sl = new SortedList<string, Person>(10);
            sl.Add("Liu",p1);//添加
            sl.Remove("Liu");//删除
            sl.IndexOfKey("Liu");//获取索引

不变的集合 ImmutableArray<T>
  如果对象可以改变状态,就很难再多个同时运行的任务中使用。如果对象不能改变其状态,就很容易在多线程中使用。不能改变的对象称为不变的对象。
  NET 4.5中新增的System.Coolections.Immutable可以创建不能改变的集合类。

            Person p1 = new Person();
            p1.Age = 1;
            ImmutableArray<Person> ia = ImmutableArray.Create<Person>();
            ImmutableArray<Person> ia1 = ia.Add(p1);//添加元素返回新的不变集合,原来的不修改  ia是个空,ia1包含1个元素

原文地址:https://www.cnblogs.com/liuxiansheng1024/p/12632389.html

时间: 2024-10-12 17:01:17

C#语言基础-11 字典/集/有序集合/不变的集合的相关文章

JavaScript语言基础11

JavaScript中的字符间的比较. 在开始学习接下来的内容时,我们先来看下alert()这个函数,它是一个消息提示框. OK,接下来正式介绍代码: <HTML> <HEAD> <TITLE>Hello World</TITLE> </HEAD> <BODY BGCOLOR="WHITE"> <SCRIPT Language="JavaScript" TYPE="text/ja

C语言基础11

函数指针的定义: 函数类型 (标识符 指针变量名)(形参列表) void  printHello( ); void printHello( ){ printf("hello world!!! " ); } main函数中: //创建函数指针,同时赋值空 int (*p)() = NULL; p = printHello  // 将函数名称 赋值给函数指针,相当于函数的入口赋值给一个内存地址. p( );  // 此时函数指针p就可以像函数名一样调用. 就可以理解为p 于 函数名是&qu

Java入门 - 语言基础 - 11.switch_case

原文地址:http://www.work100.net/training/java-switch-case.html更多教程:光束云 - 免费课程 switch_case 序号 文内章节 视频 1 概述 - 请参照如上章节导航进行阅读 1.概述 switch case 语句判断一个变量与一系列值中某个值是否相等,每个值称为一个分支. 语法 switch case 语句语法格式如下: switch(expression){ case value : //语句 break; //可选 case va

Python 全栈开发二 python基础 字符串 字典 集合

一.字符串 1,在python中,字符串是最为常见的数据类型,一般情况下用引号来创建字符串. 1 >>ch = "wallace" 2 >>ch1 = 'wallace' 3 >>ch2 = ''' 4 wallace 5 wallace 6 wallace 7 ''' 8 #以上三种引号都可以定义一字符串, 9 #三引号定义的字符串可以换行 注意:字符串是不可变的数据类型,关于可变与不可变将会在后文解释. 2,转义字符 在python中有一些字符是

Lua语言基础汇总(11) -- Lua中的模块与包

前言 从Lua5.1版本开始,就对模块和包添加了新的支持,可是使用require和module来定义和使用模块和包.require用于使用模块,module用于创建模块.简单的说,一个模块就是一个程序库,可以通过require来加载.然后便得到了一个全局变量,表示一个table.这个table就像是一个命名空间,其内容就是模块中导出的所有东西,比如函数和常量,一个符合规范的模块还应使require返回这个table.现在就来具体的总结一下require和module这两个函数. require函

C#语言基础——集合(ArrayList集合)

集合及特殊集合 集合的基本信息: System.Collections 命名空间包含接口和类,这些接口和类定义各种对象(如列表.队列.位数组.哈希表和字典)的集合.System.Collections.Generic 命名空间包含定义泛型集合的接口和类,泛型集合允许用户创建强类型集合,它能提供比非泛型强类型集合更好的类型安全性和性能.ystem.Collections.Specialized 命名空间包含专用的和强类型的集合,例如,链接的列表词典.位向量以及只包含字符串的集合. 常用的集合为Ar

C#语言基础——特殊集合

特殊集合一.stack集合栈:stack,先进后出,一个一个赋值,一个一个取值,按顺序,且没有索引属性和方法:.count 取集合内元素的个数.push() 将元素一个一个推入集合中.pop() 将元素一个个弹出集合.clear() 清空集合.peek( ) 只查看,不移除注: ss.Pop();//把最后一个进入集合的元素弹出集合 ss.Peek();//只查看最后一个进去的值是什么,不移除示例一:Stack 干草堆,先推进去的最后才出来 示例二:弹出元素,并且计算集合里面还有几个元素 示例三

【quick-cocos2d-x】Lua 语言基础

版权声明:本文为博主原创文章,转载请注明出处. 使用quick-x开发游戏有两年时间了,quick-x是cocos2d-Lua的一个豪华升级版的框架,使用Lua编程.相比于C++,lua的开发确实快速便捷了许多,下文只是lua这门语言的一个基础知识点,没有涵盖整个Lua的内容,但是作为对lua入门的初步了解还是可以的,由于内容精简了不少,所以语言上可能会有点跳跃,但是问题不大. 要了解一门语言,首先要了解的是语言的标识符.保留字.常量和变量,命名规范和注释以及数据类型等.然后是运算符.控制流语句

Object Pascal 语法之语言基础(二)

1.5 数据类型与定义变量 Object Pascal 语言的最大特点是对数据类型的要求非常严谨.传递给过程或函数的参数值必须与形参的类型一致.在Object Pascal 语言中不会看到像C 语言编译器提示的“可疑的指针转换”等警告信息.由于Object Pascal 语言对数据类型比较严谨,因此它会对代码进行严格检查,以确保不会出现错误.变量是程序代码中代表一个内存地址的标识符,那么该地址的内存内容就可以在程序代码执行时被改变.每个变量都有一个名字和数据类型,名字可以用来引用变量,数据类型决