重复where()vs c#中的多个集合
发布时间:2020-12-15 21:24:40 所属栏目:百科 来源:网络整理
导读:我有一个对象A的集合.每个A都有一个与对象B相关的字段 – 我有另一个集合.换句话说,每个B都附加到As集合的子集(但仅在概念上,而不是在代码中).该字段 – 将A与B相关联 – 可在系统寿命期间发生变化.存在阻止改变该结构的系统要求. 如果我需要在每个B的A集上
我有一个对象A的集合.每个A都有一个与对象B相关的字段 – 我有另一个集合.换句话说,每个B都附加到As集合的子集(但仅在概念上,而不是在代码中).该字段 – 将A与B相关联 – 可在系统寿命期间发生变化.存在阻止改变该结构的系统要求.
如果我需要在每个B的A集上重复执行操作,那么重复使用A集合上的Where()方法或创建B拥有的另一个集合以及管理相关的添加和删除的类会更好吗项目. 让我看看我是否可以在代码中捕获它: class A { public B owner; ... } class B { ... } class FrequentlyCalledAction { public DoYourThing(B current) { List<A> relevantItems = listOfAllAItems.Where(x => x.owner == current).ToList() foreach (A item in relevantItems) { ... } } } VS: class A { public B owner; ... } class B { public List<A> itsItems; } class FrequentlyCalledAction { public void DoYourThing(B current) { foreach (A item in current.itsItems) { ... } } } class AManager { public void moveItem(A item,B from,B to) { from.itsItems.remove(item); to.itsItems.add(item); } } 解决方法
这主要取决于集合的大小.如果只有少数项目,解决方案2带来的开销大于性能增益.
在这种情况下,我会使用解决方案一,因为它具有更好的可读性并且管理起来不那么复杂. 如果集合中有数千个项目,我会选择解决方案二. moveItems方法是一个O(n)操作,但似乎在您的方案中有更多的读取而不是写入.因此,您通过更结构化的设计获得更多性能. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |