猿问

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

我正在使用以下 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);


当年话下
浏览 149回答 2
2回答

www说

坦率地说,我会用自定义扩展方法来替换ToDictionary,但不是使用Add,而是使用索引器分配:public static Dictionary<TKey, TValue> ToDictionaryLast<TSource, TKey, TValue>(&nbsp; &nbsp; this IEnumerable<TSource> source, Func<TSource, TKey> keySelector,&nbsp; &nbsp; Func<TSource, TValue> valueSelector){&nbsp; &nbsp; var result = new Dictionary<TKey, TValue>();&nbsp; &nbsp; foreach(var value in source)&nbsp; &nbsp; &nbsp; &nbsp; result[keySelector(value)] = valueSelector(value);&nbsp; &nbsp; return result;}这 - 在重复键的情况下 - 保留最后一个值,而不是失败。然后将最后一个操作替换为:.ToDictionaryLast(x => x.Key, x => x.Value);

慕容3067478

您需要按Key属性对其进行Select&nbsp;First分组,然后从分组的子项中分组。然后,您将有效地跳过不是按 Key 分组的第一个记录。...).GroupBy(i&nbsp;=>&nbsp;i.Key).Select(g&nbsp;=>&nbsp;g.First()).ToDictionary(...
随时随地看视频慕课网APP
我要回答