【发布时间】:2013-12-18 06:36:15
【问题描述】:
我只想迭代集合中的某些元素,而不必每次都修改集合或创建一个新元素。就上下文而言,这是针对游戏的。
假设我们在屏幕上有一组实体 S = { A, B, C, D }。 每个实体都会以某种方式影响其他实体。因此,A 将影响集合 S 中的所有实体,除了它自己。
由于所有实体共享同一个集合,我不想为所有实体创建一个新集合,因为它只缺少实体本身。更重要的是,我想让某些实体不影响其他某些实体。这些实体将包含在该实体的排除集中(例如:B 的排除集 = { D },因此,B 将影响 { A, C }。
我不想在每次迭代时检查元素是否存在于排除集中,并且在循环之前从公共集中删除每个实体并再次添加它们似乎是错误的。此外,另一件显而易见的事情是让每个实体持有一组东西进行迭代(不包括自身和任何被排除的实体),但看起来又很糟糕,因为大多数实体的集合几乎与公共集合完全相同,当在屏幕上添加和删除实体时,我必须同步所有这些集合。更不用说当屏幕上有 10,000 个实体时,那是很多额外的集合。也许我在这里过度考虑空间/时间成本,但我觉得好像有一种更优雅的方式来处理这个问题。
【问题讨论】:
-
请记住,您不会复制整个集合。只是参考。这还不算多。
-
确实如此。我想我只是担心在这种方法下它们都需要同步到“主集”。因此,在向游戏添加元素时,您必须添加到所有集合而不是只添加主集合。我在网上找到了一个 ObservableSet 实现,可以很容易地做到这一点,尽管它在向集合中添加/删除任何元素时会增加少量开销。不过,我很高兴 Contains 的速度快如闪电。