- C# 无论是哈希表还是字典数据结构,key的值都不能相同,如果相同了就会抛出异常。
- 如果key与value的值是相同的话,可以存储相同的key,通过重写IEqualityComparer<?T>这个类的 bool Equals(T? x, T? y) int GetHashCode([DisallowNull] T obj)这两个方法
其实就是变化一下他们的hashcode,因为每个变量的hashcode都不一样的
public class RepeatDictionaryComparer : IEqualityComparer<int>
{
public bool Equals(int x, int y)
{
return x != y;
}
public int GetHashCode(int obj)
{
return obj.GetHashCode();
}
}
那么问题来了,怎么存储Dictionnary<int,string>不同类型的键值对呢?或者一个Key对应多个Values的字典?
答:其实可以把value变成链表的形式或者数组的形式就好了
Dictionary<int, List>
Dictionary<string,ArrayList>
//测试代码如下
Dictionary<int, List<string> >dic = new Dictionary<int, List<string>>();
//声明一个链表
List<string> list = new List<string>();
list.Add("1");
list.Add("2");
list.Add("3");
list.Add("4");
//向字典添加键值对
dic.Add(1, list);
dic.Add(2, list);
//判断是否含有key值为3,如果有就添加进去,如果没有就另外创建一个键值对
if(dic.ContainsKey(3))
{
dic[3].Add("5");
}
else
{
dic.Add(3, new List<string>() {"6"});
}
//作一次帅选
var output= dic.Where(k=>k.Value.Count > 1).ToList();
//输出一个Value的值
foreach (var item in output)
{
foreach(string s in item.Value)
{
Console.WriteLine(s);
}
}