poo*_*kie 1 c# concurrentdictionary
假设我有一个ConcurrentDictionary:
var dict = new ConcurrentDictionary<string, someObject>();
dict.TryAdd("0_someA_someB_someC", obj0);
dict.TryAdd("1_someA_someB_someC", obj1);
dict.TryAdd("2_someA_someB_someC", obj2);
dict.TryAdd("3_someA_someB_someC", obj3);
Run Code Online (Sandbox Code Playgroud)
键中的<number>_是递增的并且是字典,不能保证元素是按顺序排列的。
现在,假设我想从字典中删除所有小于 的number项目2。我不知道这些键会是什么样子,只知道它们会以上面的数字为前缀。
如何从字典中删除键以小于值开头的所有元素2?
例如,此过程后生成的字典将如下所示:
dict.TryAdd("2_someA_someB_someC", obj2);
dict.TryAdd("3_someA_someB_someC", obj3);
Run Code Online (Sandbox Code Playgroud)
假设它始终具有这种格式,您可以使用 LINQ:
var keysToRemove = dict.Keys.Where(key => int.Parse(key.Remove(key.IndexOf('_'))) < 2).ToList();
keysToRemove.ForEach(key => dict.TryRemove(key, out someObject obj));
Run Code Online (Sandbox Code Playgroud)
String.Remove删除从 开始的部分_,然后解析剩余的第一部分,即数字。它只会选择数字小于 2 的键。该列表将用于从字典中删除项目。当然,你需要一个锁来保证线程安全。