为了账号安全,请及时绑定邮箱和手机立即绑定

在添加到字典之前如何检查键是否存在

在添加到字典之前如何检查键是否存在

C#
当年话下 2021-07-09 13:02:40
我正在使用以下 linq 代码将值添加到字典中,现在发生的情况是重复的键条目是从字典中跳过两个条目,我需要至少一个存在于字典中。如何在以下 LINQ 代码中执行此操作。我只想要在 LINQ 中,代码如下所示:dict = (from x in sites        let pp1 = x.Split(',')         where pp1.Length > 2         let rnc = pp1[1].Replace("work=", "")         let ems = pp1[2].Replace("Context=", "")         let pp2 = GetName(ems, "CC", "U").Split('_')         where pp2.Length > 1 && !ems.Contains("_L_")         select new         {             name_ms = ems,             Key = ems + "," + rnc,             Value = Getidname(GetName(ems, "CC", "U"),             GetCode(pp2[1])) + "," + ems.Split('_')[1]         })        .ToDictionary(x => x.Key, x => x.Value);
查看完整描述

2 回答

?
www说

TA贡献1775条经验 获得超8个赞

坦率地说,我会用自定义扩展方法来替换ToDictionary,但不是使用Add,而是使用索引器分配:


public static Dictionary<TKey, TValue> ToDictionaryLast<TSource, TKey, TValue>(

    this IEnumerable<TSource> source, Func<TSource, TKey> keySelector,

    Func<TSource, TValue> valueSelector)

{

    var result = new Dictionary<TKey, TValue>();

    foreach(var value in source)

        result[keySelector(value)] = valueSelector(value);

    return result;

}

这 - 在重复键的情况下 - 保留最后一个值,而不是失败。然后将最后一个操作替换为:


.ToDictionaryLast(x => x.Key, x => x.Value);


查看完整回答
反对 回复 2021-07-10
?
慕容3067478

TA贡献1773条经验 获得超3个赞

您需要按Key属性对其进行Select First分组,然后从分组的子项中分组。然后,您将有效地跳过不是按 Key 分组的第一个记录。

...).GroupBy(i => i.Key).Select(g => g.First()).ToDictionary(...


查看完整回答
反对 回复 2021-07-10
  • 2 回答
  • 0 关注
  • 148 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信