C# 在字符串不相等的两个字符串字典之间查找;林克
我有两本字典C# 在字符串不相等的两个字符串字典之间查找;林克,c#,linq,dictionary,C#,Linq,Dictionary,我有两本字典 dicA从数据库填充,dicB从Excel列填充 dic.Values可能等于dic.Values,但大多数情况下dic.Values包含dic.Values 问题: 我想在dicB中找到包含dicA.Values的所有值,并添加到新字典dicNew,dicNew.Key=dicA.Key和dicNew.Values=dicB.Values 我的解决方案 我写了这段代码: Dictionary<string,string> res = new Dictionary&l
dicA
从数据库填充,dicB
从Excel列填充
dic.Values
可能等于dic.Values
,但大多数情况下dic.Values
包含dic.Values
问题:
我想在dicB
中找到包含dicA.Values
的所有值,并添加到新字典dicNew
,dicNew.Key=dicA.Key
和dicNew.Values=dicB.Values
我的解决方案
我写了这段代码:
Dictionary<string,string> res = new Dictionary<string, string>();
foreach (var s in dicB)
{
var data = dicA.Where(x => x.Value.Contains(s.Value)).ToList();
//check if data.count==1 add to autoBind
// autoBind.Add(data[0].Key,data[0].Value);
// else find in data which value string has most equals
// character then add this to Autobind
}
Dictionary res=new Dictionary();
foreach(dicB中的var s)
{
var data=dicA.Where(x=>x.Value.Contains(s.Value)).ToList();
//检查data.count==1是否添加到自动绑定
//autoBind.Add(数据[0]。键,数据[0]。值);
//否则,请在数据中查找哪个值字符串最相等
//字符,然后将其添加到自动绑定
}
是否有其他方法(比我的代码更好)来查找所有字典数据,并将它们添加到autobind
编辑:
dic.key
不等于dic.key
。我想找到dic.value
是否在dicB.values
中,然后如果dicB.values.count==1
添加到newDic
中,则找到最佳匹配;哪些dicB.值
字符串的字符最为相同使用此代码作为示例格式
Dictionary<int, string> abc = new Dictionary<int, string>();
foreach (var a in dicA)
{
foreach (var b in dicB)
{
if (a.key == b.key)
{
abc.add(Convert.ToInt32(a.key, b.value);
}
}
}
Dictionary abc=newdictionary();
foreach(dicA中的var a)
{
foreach(dicB中的变量b)
{
如果(a.key==b.key)
{
abc.add(转换为32(a键,b值);
}
}
}
使用此代码作为示例格式
Dictionary<int, string> abc = new Dictionary<int, string>();
foreach (var a in dicA)
{
foreach (var b in dicB)
{
if (a.key == b.key)
{
abc.add(Convert.ToInt32(a.key, b.value);
}
}
}
Dictionary abc=newdictionary();
foreach(dicA中的var a)
{
foreach(dicB中的变量b)
{
如果(a.key==b.key)
{
abc.add(转换为32(a键,b值);
}
}
}
这应该可以:
var dicNew = dicB.Where(b => !dicA.ContainsValue(b.Value)).ToDictionary(x => x.Key, x => x.Value);
这应该起作用:
var dicNew = dicB.Where(b => !dicA.ContainsValue(b.Value)).ToDictionary(x => x.Key, x => x.Value);
Dictionary dicta=新字典();
Dictionary dictb=新字典();
添加(1,“Hi”);
添加(2,“你好”);
添加(2,“Hiyo”);
第B条添加(1,“Hllow”);
变量列表=(从dicta中的d1开始)
设temp=dictb.FirstOrDefault(d2=>d2.Value.Contains(d1.Value))
其中,临时值!=null
选择new{d1.Key,temp.Value}).ToDictionary(d=>d.Key,d=>d.Value);
我希望这会有所帮助。字典dictary dicta=new Dictionary();
Dictionary dictb=新字典();
添加(1,“Hi”);
添加(2,“你好”);
添加(2,“Hiyo”);
第B条添加(1,“Hllow”);
变量列表=(从dicta中的d1开始)
设temp=dictb.FirstOrDefault(d2=>d2.Value.Contains(d1.Value))
其中,临时值!=null
选择new{d1.Key,temp.Value}).ToDictionary(d=>d.Key,d=>d.Value);
我希望这会有所帮助。您可以使用自己的iQualityComparer以优雅的方式完成
class ValueComparer<TKey, TValue> : IEqualityComparer<KeyValuePair<TKey, TValue>>
{
public bool Equals(KeyValuePair<TKey, TValue> x, KeyValuePair<TKey, TValue> y)
{
return GetHashCode(x) == GetHashCode(y);
}
public int GetHashCode(KeyValuePair<TKey, TValue> obj)
{
return obj.Value.GetHashCode();
}
}
类值比较器:IEqualityComparer
{
公共布尔等于(键值对x、键值对y)
{
返回GetHashCode(x)==GetHashCode(y);
}
public int GetHashCode(KeyValuePair obj)
{
返回obj.Value.GetHashCode();
}
}
然后你可以简单地使用
var dictC = dictA.Intersect(dictB, new ValueComparer<string, string>())
var dictC=dictA.Intersect(dictB,new ValueComparer())
您可以使用自己的iQualityComparer以优雅的方式完成此任务
class ValueComparer<TKey, TValue> : IEqualityComparer<KeyValuePair<TKey, TValue>>
{
public bool Equals(KeyValuePair<TKey, TValue> x, KeyValuePair<TKey, TValue> y)
{
return GetHashCode(x) == GetHashCode(y);
}
public int GetHashCode(KeyValuePair<TKey, TValue> obj)
{
return obj.Value.GetHashCode();
}
}
类值比较器:IEqualityComparer
{
公共布尔等于(键值对x、键值对y)
{
返回GetHashCode(x)==GetHashCode(y);
}
public int GetHashCode(KeyValuePair obj)
{
返回obj.Value.GetHashCode();
}
}
然后你可以简单地使用
var dictC = dictA.Intersect(dictB, new ValueComparer<string, string>())
var dictC=dictA.Intersect(dictB,new ValueComparer())
a.key
不等于b.key
。如果a.value字符串在b.values中,则添加到新词典,然后可以使用“if(a.value==b.value){abc.add(Convert.ToInt32(a.key,b.value);”进行更改'这是我为此提供的示例代码,您可以根据您的情况采取要求。a.key
not equalb.key
。如果a.value字符串在b.values中,则添加到新词典中,然后您可以使用'if(a.value==b.value){abc.add(Convert.ToInt32(a.key,b.value)'}这是我为此提供的一个示例代码,您可以根据您的条件接受要求。上面的代码将返回带有映射键值的dictionary对象。上面的代码将返回带有映射键值的dictionary对象。