我有许多项目,每个项目都有许多与之关联的代码。每个项目都有这些的集合。
List<ComplexObject> myCollection = new List<ComplexObject>();
var item = new ComplexObject()
{
Id = 5,
Codes = new List<string>() { "1", "4", "5" }
};
myCollection.Add(item);
我需要按需按代码过滤这些对象。将有许多条目,可能> 1,000,000,每个条目都包含一组关联的密钥。
我显然可以使用类似的东西:
var output = (from p in myCollection
from q in p.Codes
where q == x
select p).ToList();
但是,我希望能够通过代码进行过滤而无需遍历所有对象 - 这就是这里发生的事情。在这种情况下,性能至关重要,因此我希望在这些对象上实现比O(n)更好的查找时间。
我考虑创建一个将每个代码作为键的字典,以及一个ComplexObjectIds的集合,但这看起来有点笨拙 - 但也许它是最好的选择。在我的脑海中,我设想了某种网络收藏......
鉴于性能是我的最终目标,是否有更优化的方法?