gpt4 book ai didi

c# - 按值对 ConcurrentDictionary 进行排序

转载 作者:可可西里 更新时间:2023-11-01 08:42:07 28 4
gpt4 key购买 nike

我可以像这样按值对我的 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/

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