gpt4 book ai didi

c# - 获取 SortedDictionary 的子集作为 SortedDictionary

转载 作者:行者123 更新时间:2023-11-30 21:17:09 24 4
gpt4 key购买 nike

在 C# 中,如何使用 LINQ 过滤 SortedDictionary,生成一个子集,该子集也是 SortedDictionary?例如。我想写

SortedDictionary<int, Person> source = ..fetch..
SortedDictionary<int, Person> filtered = source.Where(x=>x.foo == bar)

我发现的唯一方法是创建一个辅助方法并使用它

SortedDictionary<TKey, TValue> SubDictionary<TKey, TValue> IEnumerable<KeyValuePair<TKey, TValue>> l) 
{
SortedDictionary<TKey, TValue> result = new SortedDictionary<TKey, TValue>();
foreach (var e in l)
result[e.Key] = e.Value;
return result;
}

...

SortedDictionary<int, Person> source = ..fetch..
SortedDictionary<int, Person> filtered = SubDictionary(source.Where(x=>x.foo == bar))

最佳答案

如果你想要一个单语句解决方案,这会起作用:

SortedDictionary<int, Person> filtered = 
new SortedDictionary<int, Person>(
source.Where(x => x.Value.foo == bar)
.ToDictionary(kvp => kvp.Key, kvp => kvp.Value));

但是,它是低效的,因为它创建了两个字典对象(ToDictionary() 扩展方法创建一个,然后传递给 SortedDictionary 构造函数)。

您的辅助方法会带来更好的性能。为了更简洁的语法,您可以将其作为 IEnumerable > 的扩展方法:

public static class KeyValuePairEnumerableExtensions
{
public static SortedDictionary<TKey, TValue> ToSortedDictionary<TKey, TValue>(
this IEnumerable<KeyValuePair<TKey, TValue>> l)
{
SortedDictionary<TKey, TValue> result = new SortedDictionary<TKey, TValue>();
foreach (var e in l)
result[e.Key] = e.Value;
return result;
}
}

可以这样使用:

var f2 = source.Where(x => x.Value.foo == bar).ToSortedDictionary();

关于c# - 获取 SortedDictionary 的子集作为 SortedDictionary,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4942827/

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