我有两本字典
dicA
从数据库填充,dicB
填写Excel列。
dicA.Values
可能等于dicB.Values
,但大部分时间dicB.Values
包含dicA.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
}
还有其他方法(比我的代码更好)查找所有字典数据都可以匹配并将它们添加到autobind
吗?
编辑:
dicA.key
不等于dicB.key
。我想查找dicA.value
是否在dicB.values
,然后如果dicB.values.count==1
添加到newDic
,则查找最佳匹配;哪个dicB.Values
字符串具有最相同的字符
答案 0 :(得分:1)
将此代码用作样本格式
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);
}
}
}
答案 1 :(得分:1)
var dictoinaryResult = dictionaryB.Where(x => dictionaryA.ContainsValue(x.Value)).ToDictionary(x=> x.Key, x=>x.Value);
答案 2 :(得分:0)
这应该有效:
var dicNew = dicB.Where(b => !dicA.ContainsValue(b.Value)).ToDictionary(x => x.Key, x => x.Value);
答案 3 :(得分:0)
Dictionary<int,string> dicta = new Dictionary<int, string>();
Dictionary<int, string> dictb = new Dictionary<int, string>();
dicta.Add(1, "Hi");
dicta.Add(2, "Hello");
dictb.Add(2, "Hiyo");
dictb.Add(1, "Hllow");
var list = (from d1 in dicta
let temp = dictb.FirstOrDefault(d2 => d2.Value.Contains(d1.Value))
where temp.Value != null
select new { d1.Key, temp.Value }).ToDictionary(d => d.Key ,d => d.Value );
我希望这会有所帮助。
答案 4 :(得分:0)
您可以使用自己的IEqualityComparer
以优雅的方式完成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();
}
}
然后你可以简单地使用
var dictC = dictA.Intersect(dictB, new ValueComparer<string, string>())