我有一个List<Thing> things
,其中Thing
需要通过查找两个变量T1 f1
和的组合来经常检索多个 s T2 f2
,它们是值类型。我现在这样做的方式很简单things.Where(t => t.Field1 == f1 && t.Field2 == f2)
。但是,我经常进行很多这样的查找,并且需要一种更有效的方法。
幸运的是,things
不需要删除或添加元素,所以我想到了在构造时解析列表并添加到Dictionary<T1, Lookup<T2, Thing>>
. 但是,这感觉很混乱,尤其是在添加解析的情况下。如果我需要查找更多字段,它会变得非常棘手。三个字段看起来像Dictionary<T1, Dictionary<T2, Lookup<T3, Thing>>>
。
我的下一个想法是制作一个Lookup<Tuple<T1,T2,T3,...>,Thing>
. 但在这种情况下,我不确定键是否真的有效,因为 Tuple 是一种引用类型。
即使我做了一个Lookup<ValueType<T1,T2,T3,...>,Thing> things
,查找语句也会things[new ValueType<T1,T2,T3,...>(f1, f2, f3, ...)]
很丑陋(我仍然不确定我是否可以信任这些键)。
有没有更优雅的解决方案来保持哈希表的性能优势,并且我可以简单地输入类似的东西IEnumerable<Thing> found = things[f1, f2, f3, ...];
?