从0开始学C#-part 13 集合(下)

  • Dictionary<TKey, TValue>集合类
    这个类在内部维护两个数组来实现关联,类似于表格,两种元素一对一
Dictionary<string, int> ages = new Dictionary<string, int>();
ages.Add("CHJ", 7);
ages.Add("CY", 40);
ages["TD"] = 36;  //两种添加元素的方式
ages["CJG"] = 65;

foreach(KeyValuePair<string, int> people in ages)  //KeyValuePair是一个结构,可通过Key和Value属性访问每个元素
{
  string name = people.Key;
  int age = people.Value;
  Console.WriteLine($"Name: {name}, Age:{age}");
}
Console.WriteLine(ages.Count);
ages.Clear();  //可清除整个集合
Console.WriteLine(ages.Count);  //输出为0

要注意,ages.Add()方法不能添加重复的Key值,编译器会抛出异常
但是用[]方法就没有异常,只是会被新值覆盖。举个例子:

ages.Add("CJG", 63);
ages.Add("CJG", 23);  //会被抛出异常
ages["CJG"] = 65;  //编译通过,但CJG的Value会是65
  • SortedList<T>
    SortedListDictionaryList类似,只不过会把所有的元素按Key来排序,而且也不能包含重复键。这里就不再多啰嗦,继续学习最后一个集合类

  • HashSet<T>

HashSet\<T>专为集合操作优化,可以判断数据项是否是集合成员,还可以生成交集/并集

HashSet最强大的地方是它带的几个方法: IntersectWith, UnionWith, ExceptWith这几个方法是用来生成和一个已有集合相交、合并或者不包含某些数据项的新集合;IsSubsetOf, IsSupersetOf, IsProperSubsetOf, IsProperSupersetOf这几个方法判断一个HashSet集合的数据是否是另一个HashSet集合的超集或者子集,返回值是0,1 bool值。

狗是哺乳动物的一个子集,哺乳动物是狗的一个超集

我们可以通过一个练习来学习这几种方法的用法

HashSet<string> employees = new HashSet<string>(new string[] { "CY","WZP","ZZS","YJ"});
HashSet<string> bosses = new HashSet<string>(new string[] { "CY", "ZZ", "HSY" });
employees.Add("CDX");   //HashSet也是通过Add和Remove方法来增加或删除某个元素
bosses.Add("ZXD");
employees.Remove("YJ");

bosses.IntersectWith(employees);  //bosses的集合会被破坏,只存有即是员工也是老板的元素
foreach(string name in bosses)
{
  Console.WriteLine(name);   //打印结果是? 只有CY
}

用别的几种方法效果分别是什么?

bosses.UnionWith(employees);  //bosses的集合被扩大为两种集合的和
bosses.ExceptWith(employees);  //bosses的集合改变为排除bosses和employees的共同项,即排除CY

还有一个小知识点,ProperSubsetOf(真子集)和SubsetOf(子集)的区别
如果A和B完全相等,A是B的子集,但不是真子集
超集和真超集也是一样的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值