寻找一个解决方案来找到一个object.id,并在一个对象数组中获取所有的parent_id,然后设置object.missed = true. Object.id和Object parent_id。如果对象没有parent_id,那么parent_id = id。
我知道如何对一个级别的parent_id进行搜索。如何深入到无限级别?下面是我搜索1级的代码。
public class EPlan
{
public int id;
public int parent_id;
public bool is_repeatable;
public bool missed;
}
EPlan[] plans = Array.FindAll(eventsPlan, item => item.parent_id == event_id);
foreach (EPlan plan in plans)
{
plan.missed = true;
plan.is_repeatable = false;
}我正在寻找event_id an int。所以我搜索所有的object.id,寻找event_id。一旦我找到了object.id == event_id,我需要设置object.is_repeatable = false和object.missed = true。
然后,我需要在所有的objects.parent_id中搜索当前object.id (event_id)。将所有这些对象更改为与上面相同的对象。然后,我需要检查所有的object.id和所有的object.parent_id,并对它们做同样的操作。就像树的影响一样。1事件被忽略了,而与该事件亲生的任何事件也需要设置为错过事件。
到目前为止,我所能做的就是获得1层深度,或者在其中编码多个foreach循环。但它可能有10层或更深。所以这没什么意义。
任何帮助都是非常感谢的。必须有更好的方法让多个循环。
发布于 2019-09-11 02:41:16
我也被这个问题搞糊涂了,除了你说的一句话:
1事件被遗漏,任何与该事件亲生的事件也需要设置为漏掉事件。
考虑到这一点,我建议下面的代码将执行您正在寻找的任务。每次调用该方法时,它都会在数组中找到与ID匹配的所有对象,并适当地将事件设置为Missed和Is_Repeatable。
它还保存了在扫描过程中找到的Parent_ID的运行列表。循环完成后,它将调用自己,使用父id值列表,而不是它刚才使用的事件id传递列表。这就是使递归在这里工作的诀窍。
要启动该过程,您可以使用为1级搜索执行的单个事件ID调用该方法。
findEvents(new List<string>{event_id}, eventsPlan);
private void findEvents(List<int> eventIDs, EPlan[] eventsPlan)
{
foreach (int eventID in eventIDs)
{
EPlan[] plans = Array.FindAll(eventsPlan, item => item.parent_id == eventID);
List<int> parentIDs = new List<int>();
foreach (EPlan plan in plans)
{
plan.missed = true;
plan.is_repeatable = false;
parentIDs.Add(plan.parent_id);
}
if (parentIDs.Count > 0)
findEvents(parentIDs, eventsPlan);
}
}我还建议,如果您有机会重新设计这段代码而不使用数组,但是通用集合(如List<EPlan>)可以避免此代码的性能损失,因为每次调用Array.FindAll方法时它都会在内存中构建新的数组。在这里处理大量数据时,使用泛型集合( Generic ),甚至使用老式的foreach循环将工作得更快。
Update 1:回答您的问题,您可以使用泛型集合来解决这个问题:
private void findEventsAsList(List<int> eventIDs, List<EPlan> eventsPlans)
{
List<int> parentIDs = new List<int>();
foreach (EPlan plan in eventsPlans.Where(p => eventIDs.Contains(p.parent_id)))
{
plan.missed = true;
plan.is_repeatable = false;
parentIDs.Add(plan.parent_id);
}
findEventsAsList(parentIDs, eventsPlan);
}https://stackoverflow.com/questions/57879489
复制相似问题