我可以像这样按值对我的 ConcurrentDictionary 进行排序:
static ConcurrentDictionary<string, Proxy> Proxies =
new ConcurrentDictionary<string, Proxy>();
Proxies.OrderBy(p => p.Value.Speed);
这很棒,除了我想将新的重新排序的列表设置为字典,有效地对字典本身进行排序,而不是仅仅接收排序项目的结果列表。
我尝试做这样的事情但没有运气 - 字典在之后仍然是无序的:
Proxies = new ConcurrentDictionary<string,Proxy>(
Proxies.OrderBy(p => p.Value.Speed));
看起来这样做对字典没有影响。我还尝试将 OrderBy 结果转换为一个新的 var,认为它可能会对委托(delegate)产生影响,但仍然没有成功。
如何重新排序这个 ConcurrentDictionary,然后强制字典成为 OrderBy 重新排序的结果?
最佳答案
简单的字典不是排序的集合。它们只是一个将键映射到值的集合。 ConcurrentDictionary
也不异常(exception)。
您需要一个 SortedConcurrentDictionary
(类似于 SortedDictionary
),但是,此数据结构不存在。
至于您是否真的需要一个排序的“字典”,我们需要更多地了解您的用例。这是一个虚假的优先级队列吗?你能简单地使用 ConcurrentBag<Proxy>
吗?并在事后执行排序?
如果您需要获取集合并在下游并行方法中按排序顺序使用代理,我建议您查看创建一个 custom Partitioner , 可能借用 MSDN example of an OrderablePartitioner .
关于c# - 按值对 ConcurrentDictionary 进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8608769/