如何解决创建ConcurrentDictionary <字符串,ConcurrentQueue <decimal >>并保持指定的顺序
我正在尝试使用以下代码返回ConcurrentDictionary
public ConcurrentDictionary<string,ConcurrentQueue<decimal>>
GetBestList(ConcurrentDictionary<string,ConcurrentQueue<decimal>> inputList)
{
var bestList = new ConcurrentDictionary<string,ConcurrentQueue<decimal>>(
inputList.Where(x => x.Value != null && x.Value.Count >= 2).
OrderByDescending(x => CalculateAverage(x.Value)));
return bestList;
}
public decimal CalculateAverage(ConcurrentQueue<decimal> inputList)
{
return inputList.Average();
}
上面的代码返回一个混乱的混乱,并且没有保持相同的顺序,因此我尝试对其进行更改。我找到了this question,并使用了答案中的代码来尝试这一操作,它在保持正确顺序的情况下可以正常工作,但是它是一个Dictionary而不是ConcurrentDictionary
var bestList = inputList.Where(x => x.Value != null && x.Value.Count >= 2).
OrderByDescending(x => CalculateAverage(x.Value)).
ToDictionary(pair => pair.Key,pair => pair.Value);
然后我发现this question,并使用答案中的代码创建ToConcurrentQueue的扩展方法,但它也不保持相同的顺序并返回混乱的消息。
public static class ConcurrentDictionaryExtensions
{
public static ConcurrentDictionary<TKey,TElement> ToConcurrentDictionary<TSource,TKey,TElement>(this IEnumerable<TSource> source,Func<TSource,TKey> keySelector,TElement> elementSelector,IEqualityComparer<TKey> comparer)
{
if (source == null) throw new ArgumentNullException("source");
if (keySelector == null) throw new ArgumentNullException("keySelector");
if (elementSelector == null) throw new ArgumentNullException("elementSelector");
ConcurrentDictionary<TKey,TElement> d = new ConcurrentDictionary<TKey,TElement>(comparer ?? EqualityComparer<TKey>.Default);
foreach (TSource element in source)
d.TryAdd(keySelector(element),elementSelector(element));
return d;
}
public static ConcurrentDictionary<TKey,TSource> ToConcurrentDictionary<TSource,TKey>(this IEnumerable<TSource> source,TKey> keySelector)
{
return ToConcurrentDictionary<TSource,TSource>(source,keySelector,IdentityFunction<TSource>.Instance,null);
}
public static ConcurrentDictionary<TKey,IEqualityComparer<TKey> comparer)
{
return ToConcurrentDictionary<TSource,comparer);
}
public static ConcurrentDictionary<TKey,TElement> elementSelector)
{
return ToConcurrentDictionary<TSource,TElement>(source,elementSelector,null);
}
internal class IdentityFunction<TElement>
{
public static Func<TElement,TElement> Instance
{
get { return x => x; }
}
}
}
我已经用尽了所有想法,所以希望这里的人可以让我知道如何使用相同的顺序返回ConcurrentDictionary。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。