加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

重复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)操作,但似乎在您的方案中有更多的读取而不是写入.因此,您通过更结构化的设计获得更多性能.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读