use*_*380 12 c# parallel-processing concurrency concurrent-programming c#-4.0
我可以像这样按值对ConcurrentDictionary进行排序:
static ConcurrentDictionary<string, Proxy> Proxies =
new ConcurrentDictionary<string, Proxy>();
Proxies.OrderBy(p => p.Value.Speed);
Run Code Online (Sandbox Code Playgroud)
这很好,除了我想将新的重新排序的列表设置为字典,有效地排序字典本身而不是仅仅接收已排序项的结果列表.
我尝试做这样的事情,但没有运气 - 字典仍然无序后:
Proxies = new ConcurrentDictionary<string,Proxy>(
Proxies.OrderBy(p => p.Value.Speed));
Run Code Online (Sandbox Code Playgroud)
似乎这样做对字典没有影响.我也尝试将OrderBy结果转换为一个新的var,认为它可能对委托产生影响但仍然没有运气.
如何重新订购此ConcurrentDictionary,然后强制字典成为OrderBy的重新排序结果?
简单的词典不是排序的集合.它们只是将键映射到值的集合.ConcurrentDictionary没有什么不同.
您需要SortedConcurrentDictionary(类似于SortedDictionary),但是,此数据结构不存在.
至于如果你真的需要一个有序的"字典",我们需要听到更多关于你的用例的信息.这是一个虚假的优先队列吗?您可以简单地使用a ConcurrentBag<Proxy>并在事后执行订购吗?
如果您需要采用集合并在下游并行方法中按排序顺序使用代理,我建议您查看创建自定义分区程序,可能借用OrderablePartitioner的MSDN示例.
| 归档时间: |
|
| 查看次数: |
12227 次 |
| 最近记录: |