我有一个帮助器,通过连接IDictionary<TKey, TValue>
的{{1}}方法,将两个或多个IDictionary<TKey, string>
个对象合并为一个TValue
:
ToString()
虽然这很简单易读,但似乎应该有一种更有效的方法来做到这一点。有吗?
答案 0 :(得分:7)
我不知道这是否更有效,但至少它更短:
var result = dictionaries.SelectMany(d => d)
.ToLookup(kvp => kvp.Key, kvp => kvp.Value)
.ToDictionary(g => g.Key, g => string.Concat(g));
答案 1 :(得分:1)
您可以使用foreach
删除可见 SelectMany
:
foreach (var kvp in dictionaries.SelectMany(dd => dd))
{
if (returnValue.ContainsKey(kvp.Key))
{
returnValue[kvp.Key] += kvp.Value.ToString();
}
else
{
returnValue[kvp.Key] = kvp.Value.ToString();
}
}
你可以进一步扩展,although dtb's is more elegant and efficient:
var merged = dictionaries.SelectMany(dd => dd)
.GroupBy(kvp => kvp.Key, kvp => kvp.Value)
.ToDictionary(
gg => gg.Key,
gg => String.Concat(gg));
但是,这可能不比您当前的方法更有效或可读。
答案 2 :(得分:0)
您可以使用TryGetValue来合并源值的位置和检索。