gpt4 book ai didi

c# - 使用 Linq 从字典 C# 中删除特定值

转载 作者:行者123 更新时间:2023-11-30 20:33:44 25 4
gpt4 key购买 nike

我有一本字典,其中包含来自已解析测试运行的信息。键是方法的名称,值是 TestRunProperties 的列表。我的字典包含测试运行中的所有方法,我想删除测试运行期间失败的方法。这可能与 Linq 相关吗?

TestRunProperties 类:

public class TestRunProperties
{
public string computerName { get; set; }
public TimeSpan duration { get; set; }
public string startTime { get; set; }
public string endTime { get; set; }
public string testName { get; set; }
public string outcome { get; set; }
}

字典:

//Key is the name of the method, value is the properties associated with each run
private static Dictionary<string, List<TestRunProperties>> runResults = new Dictionary<string, List<TestRunProperties>>();

我试过了,但我觉得我对 Where 部分感到困惑:

runResults.Remove(runResults.Where(methodName => methodName.Value.Where(method => method.outcome.ToLower().Equals("failed"))));

我对 Linq 和 Lambda 还很陌生,我仍在努力了解如何访问这样的数据。

最佳答案

只需使用一个循环来删除不需要的项目。可以写一个扩展方法,方便调用:

public static class DictionaryExt
{
public static void RemoveAll<K, V>(this IDictionary<K, V> dict, Func<K, V, bool> predicate)
{
foreach (var key in dict.Keys.ToArray().Where(key => predicate(key, dict[key])))
dict.Remove(key);
}
}

这通常比创建一个全新的字典更有效,尤其是当被删除的项目数量与字典的大小相比相对较少时。

您的调用代码如下所示:

runResults.RemoveAll((key, methodName) => methodName.Value.Where(method => method.outcome.ToLower().Equals("failed")));

(我选择名称 RemoveAll() 来匹配 List.RemoveAll() 。)

关于c# - 使用 Linq 从字典 C# 中删除特定值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39914916/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com