- 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>
SortedList
和DictionaryList
类似,只不过会把所有的元素按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的子集,但不是真子集
超集和真超集也是一样的