C# 基础知识系列- 3 集合数组 (3)

需要注意的地方是,C#对Set没有支持下标访问方式获取Set里的元素,这是因为索引位置对于集合来说意义不大,没有操作意义。

foreach (var item in set1) { // 操作 }

Set 只能通过遍历访问元素,不能通过Get或者下标操作访问元素。关于foreach循环会在下一篇《C#基础知识系列》里进行介绍。

集合运算

file

UnionWith 并

SortedSet<int> set = new SortedSet<int>{1,0,29,38,33,48,17}; set.UnionWith(new []{5,57,8,4,3,1,0,33}); // set = 0,1,3,4,5,8,17,29,33,38,48,57

通过传入一个集合对象,将该集合设置为两个集合的并集,也就是说取上图 A,B,C 三个区域的和

ExceptWith 差

SortedSet<int> set = new SortedSet<int>{1,0,29,38,33,48,17}; set.ExceptWith(new []{5,57,8,4,3,1,0,33}); // set =17,29,38,48

传入一个集合,从set中去掉同属于两个集合的元素,保留只存在于set的元素,也就是取上图中的A部分元素

IntersectWith 交

SortedSet<int> set = new SortedSet<int>{1,0,29,38,33,48,17}; set.ExceptWith(new []{5,57,8,4,3,1,0,33}); // set =0,1,33

传入一个集合,保留set与传入集合里相同的元素,也就是说取的是上图中的B部分

SymmetricExceptWith 余集

SortedSet<int> set = new SortedSet<int>{1,0,29,38,33,48,17}; set.SymmetricExceptWith(new []{5,57,8,4,3,1,0,33});//set= 3,4,5,8,17,29,38,48,57

传入一个集合,保留set与传入集合两个集合中不同的元素,也就是取上图的A+C这两部分。

Contains 包含

判断集合中是否包含目标元素,返回true/false

SortedSet<int> set = new SortedSet<int>{1,0,29,38,33,48,17}; set.Contains(1);// true

1.3.3 不同点

初始化

HashSet<T> 支持传入一个自定义的相等比较器,该比较器需要返回一个 bool值;可以指定起始容量

SortSet<T> 支持传入一个自定义的大小比较器,该比较器返回一个int值;不能指定起始容量

其他
Comparer 属性:SortSet 可以获取大小比较器;HashSet 获取一个相等比较器

1.4 Dictionary 字典

Dictionary 字典,正如它的名称一样,Dictionary 需要指定两个类型,一个作为索引键,一个作为数据值。就像字典一样,每一个词条内容都只有一个字词索引,但可以出现同义词一样。当然,作为我博大精深的中文会出现同字不同音的词组,但是一旦把音、字组合起来作为索引,那还是只会出现一个词条。
所以 Dictionary的使用方式也跟字典一样,通过索引访问和操作数据。

1.4.1 初始化

Dictionary的初始化有如下几个方法:

Dictionary<string, int> dict = new Dictionary<string, int>();// 键是字符串,值是int类型 Dictionary<string,int> dict1 = new Dictionary<string, int>(10);// 指定初始容量是10 Dictionary<string,int> dict2 = new Dictionary<string, int>() { {"1",1}, {"2",2} };// 在大括号标记中 通过 {key,value}的写法创建一个 字典对象,并包含这些键值对 // 传入一个字典对象,以传入的对象为基础创建一个字典 Dictionary<string,int> dict3 = new Dictionary<string, int>(dict2); 1.4.2 常用方法

添加元素

Dictionary<string, int> dict = new Dictionary<string, int>(); // 方法一 dict.Add("1",2);//添加一个 键为“1”,值为2的键值对。 //方法二 //字典可以类似列表的形式通过下标添加或更新键对应的值, //不过与列表不同的是,字典的下标是字符串 dict["2"] = 4;// 如果 dict中2有值,则更新为4,如果没有,则设置2对应的值为4

获取元素

Dictionary<string, int> dict = new Dictionary<string, int>(); /* 省略数据填充阶段 */ int value = dict["2"]; // value = 4 // 如果Dictionary中不存在索引为“2”的数据 // 将会抛出 System.Collections.Generic.KeyNotFoundException 异常

C# 的Dictionary还有一个TryGetValue方法可以用来尝试获取,他的使用方法是这样的:

int obj = 0; boolean isContains = dict.TryGetValue("3", out obj); // 方法会返回 dict是否包含键“3”的结果,如果有 obj 则存放了dict中对应的值,如果没有,则返回false且不改变 obj 的值

Count

获取Dictionary里键值对的数量。

int count = dict.Count;

Dictionary没有LongCount属性,因为对于Dictionary存放数据需要比对Key的相等性,如果存放巨量数据将会对数据的访问和操作效率有影响。

Keys

获取Dictionary里所有的键,返回一个KeyCollection对象,不需要关心这是一个什么类型,可以简单的把它当做一个存放了键的HashSet。

ContainsKey()

是否包含键:通常与获取元素一起使用,可以先判断Dictionary里是否有这个键,然后再进行后续操作。

Remove()

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zgzzyw.html