gpt4 book ai didi

c# - 将 KeyValuePair 的 LINQ 结果列表强制转换为字典 - 缺少概念

转载 作者:太空狗 更新时间:2023-10-29 21:30:38 26 4
gpt4 key购买 nike

我想写这个 LINQ 语句:

Dictionary<int, ItemBO> result = ( Dictionary<int, ItemBO> )
( from item in originalResults where item.Value.SomeCriteria == true
select item );

originalResults类型为 Dictionary<int, ItemBO> .

我明白了 item类型为 KeyValuePair<int, ItemBO> ,但会认为从那种类型的列表到那种类型的字典的转换会是……呃……“自然”。

相反,为了让编译器关闭,我需要这样写:

Dictionary<int, ItemBO> result = 
( from item in originalResults where item.Value.SomeCriteria == true
select item.Value ).ToDictionary( GetItemKey );

这虽然不完全违反直觉,但表明许多不必要的解包和重新打包词典的工作正在幕后进行。有更好的解决方案吗?是否有我遗漏的概念?

最佳答案

Which, although not entirely counter-intuitive, suggests that a lot of unnecessary work unpackaging and repackaging the Dictionary is going on under the covers.

我不确定您所说的“不必要的”工作是什么意思。执行此操作需要大量工作——必须对查询进行全面评估,这涉及扫描整个字典并评估每个条目的谓词。此外,必须创建并填充一个新字典来存储结果。我认为,如果这项工作被自动转换隐藏了,那将是一个更大的问题。

真正的问题是您在倒着使用字典。按键查找很快,但按值查找需要扫描字典中的所有项目。如果您可以存储字典,以便您用于过滤的值是键,那么您将能够进行更快的查找并使用更清晰的语法。

关于c# - 将 KeyValuePair 的 LINQ 结果列表强制转换为字典 - 缺少概念,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4570561/

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