c# List< Dictionary<字符串,string>比;添加唯一的字典
本文关键字:添加 唯一 字典 string List Dictionary 字符串 lt | 更新日期: 2023-09-27 18:04:30
我有一个字典列表:
List<Dictionary<string, string>> items = new List<Dictionary<string, string>>();
foreach (var group in groupedItems)
{
foreach (var item in group)
{
Dictionary<string, string> newItem = new Dictionary<string, string>();
newItem.Add("name", item.Name);
newItem.Add("value", item.Value);
}
}
items.Add(newItem);
基本上,当我循环遍历分组项时,我创建了一个Dictionary,其中键是项。名称和值是item.Value。在分组的情况下,这将导致列表中出现重复的字典。
如何避免在列表中添加重复的Dictionary ?
我有一个foreach循环,我想添加一些项目一次
首先想到的是创建自己的extends
Dictionary<string, string>
类,并实现自己的GetHashCode()
和Equals
版本:
public class MyDictionary : Dictionary<string, string>
{
public override int GetHashCode()
{
...
}
public override bool Equals(object source)
{
...
}
}
在Equals
中你实现了相等机制,在GetHashCode
中你实现了一个机制,根据你的相等标准,为两个相同的字典产生相同的数值。
然后,用HashSet<MyDictionary>
代替List<Dictionary<string, string>>
。因为集合不允许重复,所以你应该得到一个由唯一的字典集合组成的集合。
我是这样解决的:
我创建了一个新字典:
Dictionary<string, string> control = new Dictionary<string, string>();
然后我就像这样做:
Dictionary<string, string> newItem = new Dictionary<string, string>();
newItem.Add("name", item.Name);
newItem.Add("value", item.Value);
if (!control.ContainsKey(item.Name))
{
control.Add(item.Name);
items.Add(newItem);
}
您可以实现自己的EqualityComparer
来确定两个字典是否相等:
class EqualityComparer<Dictionary<string, string>> : IEqualityComparer<Dictionary<string, string>>
{
public bool Equals(Dictionary<string, string> x, Dictionary<string, string> y)
{
// your code here
}
public int GetHashCode(Dictionary<string, string> obj)
{
// your code here
}
}
现在您可以在检查是否存在新项时使用此比较器:
foreach (var g in groupedItems)
{
Dictionary<string, string> newItem = new Dictionary<string, string>();
foreach(var item in g)
{
newItem.Add("name", item.Name);
newItem.Add("value", item.Value);
}
if (!items.Contains(newItem, new EqualityComparer()) items.Add(newItem);
}
因此不需要创建Dictionary
的新实现。