首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ConcurrentDictionary AddOrUpdate by predicate

ConcurrentDictionary AddOrUpdate by predicate
EN

Stack Overflow用户
提问于 2012-03-06 00:20:39
回答 2查看 2.9K关注 0票数 3

我有一台ConcurrentDictionary。我使用它的AddOrUpdate方法来操作它的项。

我的问题是:是否可以使用AddOrUpdate的update参数来包含if语句?例如,我的ConcurrentDictionary包含具有string Id和DateTime Date属性的对象。

我想-如果具有给定Id的对象不存在,则向其添加一个新对象-更新它,如果新对象的日期等于或大于现有对象的日期,如果它小于现有对象的日期,则不做任何事情。

在我的示例中:

代码语言:javascript
复制
Dictionary.AddOrUpdate(testObject.Id,testObject,(k, v) => v);

我该换衣服了

代码语言:javascript
复制
(k, v) => v

代码语言:javascript
复制
if(v.Date >= existingItem.Date) (k, v) => v
else do nothing
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-03-06 00:27:48

v是集合中当前存在的值,因此什么都不做只需返回它即可。

代码语言:javascript
复制
Dictionary.AddOrUpdate(testObject.Id,testObject,(k, v) => 
    (v.Date >= existingItem.Date) ? testObject : v);

可读性更强:

代码语言:javascript
复制
Dictionary.AddOrUpdate(testObject.Id,testObject,(k, v) => 
{
    if(v.Date >= existingItem.Date) 
        return testObject; 
    else
        return v;
});
票数 5
EN

Stack Overflow用户

发布于 2012-03-06 00:27:47

实现这一点的一种简单方法是,如果新值不大于原始值,则updateValueFactory lambda返回原始值:

代码语言:javascript
复制
Dictionary.AddOrUpdate(testObject.Id, testObject,
    (key, value) => testObject.Date > value.Date ? testObject : value);
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9570110

复制
相关文章

相似问题

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