我有一个用Pr_Matrix命名的ConcurrentDictionary:
ConcurrentDictionary<int, ConcurrentDictionary<int, float>> Pr_Matrix = new ConcurrentDictionary<int, ConcurrentDictionary<int, float>>();以下代码的目的是将data_set.Set_of_Point数据集中每对点之间的相似度值添加到此字典中。
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。
发布于 2012-09-16 22:04:48
第一个问题是AddOrUpdate方法返回一个浮点数据类型。必须显式返回ConcurrentDictionary:
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不支持集合初始值设定项,因此必须使用类似字典的方式对其进行初始化
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; }
);https://stackoverflow.com/questions/12447243
复制相似问题