首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何更新存在于另一个ConcurrentDictionary中的ConcurrentDictionary?

如何更新存在于另一个ConcurrentDictionary中的ConcurrentDictionary?
EN

Stack Overflow用户
提问于 2012-09-16 21:29:01
回答 1查看 761关注 0票数 1

我有一个用Pr_Matrix命名的ConcurrentDictionary:

代码语言:javascript
复制
ConcurrentDictionary<int, ConcurrentDictionary<int, float>> Pr_Matrix = new ConcurrentDictionary<int, ConcurrentDictionary<int, float>>();

以下代码的目的是将data_set.Set_of_Point数据集中每对点之间的相似度值添加到此字典中。

代码语言:javascript
复制
foreach (var point_1 in data_set.Set_of_Point)
{
   foreach (var point_2 in data_set.Set_of_Point)
   {
       int point_id_1 = point_1.Key;
       int point_id_2 = point_2.Key;
       float similarity = selected_similarity_measure(point_1.Value, point_2.Value);

       Pr_Matrix.AddOrUpdate(point_id_1, 
       new ConcurrentDictionary<int, float>() { Keys = {  point_id_2 }, Values = { similarity } }, 
       (x, y) => y.AddOrUpdate(point_id_2, similarity, (m, n) => n));
   }
}

我无法更新主ConcurrentDictionary中存在的ConcurrentDictionarys。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-09-16 22:04:48

第一个问题是AddOrUpdate方法返回一个浮点数据类型。必须显式返回ConcurrentDictionary:

代码语言:javascript
复制
  Pr_Matrix.AddOrUpdate(point_id_1, new ConcurrentDictionary<int, float>() { Keys = { point_id_2 }, Values = { similarity } }

                        , (x, y) => { y.AddOrUpdate(point_id_2, similarity, (m, n) => n); return y; });

第二个问题是键和值集合是只读的,而ConcurrentDictionary不支持集合初始值设定项,因此必须使用类似字典的方式对其进行初始化

代码语言:javascript
复制
Pr_Matrix.AddOrUpdate(
    point_id_1, 
    new ConcurrentDictionary<int, float>(new Dictionary<int, float> {{point_id_2, similarity}} ), 
    (x, y) => { y.AddOrUpdate(point_id_2, similarity, (m, n) => n); return y; }
);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12447243

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档