我有>的并发字典让对象称为神器。
我想添加一个新对象。该对象通常包含键列表,我有一个函数来获取这些键。
我知道如果密钥不存在,如何添加到字典但我不知道如果密钥已经存在,如何更新List。任何帮助将不胜感激
\renewcommand{\thepage}{\ifnum\value{page}<10 0\fi\arabic{page}}
答案 0 :(得分:2)
试试termDictionary[<key>] = <value>
。这将同时添加和更新(它将防止重复的密钥异常(可能只是覆盖现有数据)。
答案 1 :(得分:1)
您可以使用AddOrUpdate。
从概念上讲,AddOrUpdate方法将始终导致集合中的值更改。
这些方法的目的是解决并发系统中时间性质的问题。对于多个线程,您无法预测在任何执行点都会在集合中找到哪些元素。
这是MSDN示例
class CD_GetOrAddOrUpdate
{
// Demonstrates:
// ConcurrentDictionary<TKey, TValue>.AddOrUpdate()
// ConcurrentDictionary<TKey, TValue>.GetOrAdd()
// ConcurrentDictionary<TKey, TValue>[]
static void Main()
{
// Construct a ConcurrentDictionary
ConcurrentDictionary<int, int> cd = new ConcurrentDictionary<int, int>();
// Bombard the ConcurrentDictionary with 10000 competing AddOrUpdates
Parallel.For(0, 10000, i =>
{
// Initial call will set cd[1] = 1.
// Ensuing calls will set cd[1] = cd[1] + 1
cd.AddOrUpdate(1, 1, (key, oldValue) => oldValue + 1);
});
Console.WriteLine("After 10000 AddOrUpdates, cd[1] = {0}, should be 10000", cd[1]);
// Should return 100, as key 2 is not yet in the dictionary
int value = cd.GetOrAdd(2, (key) => 100);
Console.WriteLine("After initial GetOrAdd, cd[2] = {0} (should be 100)", value);
// Should return 100, as key 2 is already set to that value
value = cd.GetOrAdd(2, 10000);
Console.WriteLine("After second GetOrAdd, cd[2] = {0} (should be 100)", value);
}
}
答案 2 :(得分:0)
ConcurrentDictionary GetOrAdd方法获取工厂委托:
var list = termDictionary.GetOrAdd(term, t=>new List<Artifact>());
list.Add(artifact);