gpt4 book ai didi

c# - 仅迭代集合中的一部分元素

转载 作者:太空宇宙 更新时间:2023-11-03 16:02:39 26 4
gpt4 key购买 nike

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

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

由于所有实体共享同一个集合,我不想为所有实体创建一个新集合,因为它只缺少实体本身。更重要的是,我想让某些实体不影响其他某些实体。这些实体将包含在该实体的排除集中(例如:B 的排除集 = { D },因此,B 将影响 { A,C }。

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

最佳答案

您希望能够对集合中的所有元素执行一些操作,除了一个“acting”元素,以及在执行元素的 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 中的正确元素。

关于c# - 仅迭代集合中的一部分元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20651202/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com