我只想遍历集合中的某些元素,而不必每次修改集合或创建一个新元素。对于上下文,这是针对游戏的。

假设我们在屏幕S = {A,B,C,D}上有一组实体。
每个实体都会以某种方式影响其他实体。因此,A将影响集合S中的所有实体(自身除外)。

由于所有实体共享相同的集合,因此我不需要为所有实体创建新的集合,而这仅缺少实体本身。而且,我希望某些实体不影响其他某些实体。这些实体将包含在该实体的“排除集”中(例如:B的排除集= {D},因此,B将影响{A,C}。

我宁愿不在每次迭代中检查元素是否存在于排除集中,并且在循环之前从公用集中删除每个实体并再次添加它们似乎是错误的。此外,另一件显而易见的事情是使每个实体都拥有一组要迭代的东西(不包括自身和任何排除的实体),但是由于大多数实体的集合几乎与公共集合完全相同,因此再次感到不舒服,当在屏幕上添加和删除实体时,我将必须同步所有这些集合。更不用说当屏幕上有10,000个实体时,还有很多额外的集合。也许我在考虑此处的时空成本,但是我觉得似乎有一种更优雅的方式来处理此问题。

最佳答案

您希望能够对集合中的所有元素(除了一个operation以及作用元素的"acting" element中的选定的其他几个元素)执行某些exclude-list,对吗?

如果正确,那么您可以将每个元素以及应排除的其他元素包括在自己的排除列表中,并遍历该列表中未包含的所有元素。

用伪代码简化:

var originalSet = { A, B, C, D, E }
var excludeListForA = {A, B, C} // <-- Note that A is in it's own list!

// To update D and E:
var setToActOn = originalSet.Where(element => excludeListForA.Contains(element));


只要现在仅使用引用,您就应该能够更改setToActOn中的元素以更新originalSet中的正确元素。

09-10 03:06
查看更多