微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

重复where()vs c#中的多个集合

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐