首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用foreach循环遍历嵌套列表,并对列表中的每个对象执行函数

使用foreach循环遍历嵌套列表,并对列表中的每个对象执行函数
EN

Stack Overflow用户
提问于 2017-01-28 00:59:25
回答 1查看 1.1K关注 0票数 1

我有两节课。一个叫做Component,第二个叫做PipeLine。

代码语言:javascript
复制
*Component Class*
    string id;
    int flow;
    List<PipeLine> ConnectedPipeLines;
    void ChangeFlow(int flow);
    void CalculateFlow();


*PipeLine Class*
    int flow;
    Component startComponent;
    Component endComponent;
    void RecalculateFlow();

一个组件可以有多个管道,但一个管道只能连接到两个组件。一个在开头,一个在结尾。

管道从startComponent获取流,endComponent从pipeline.Flow获取流。

代码语言:javascript
复制
public Pipeline(Component startComponent, Component endComponent);

创建管道后,该管道将添加到开始和结束组件的ConnectedPipelines列表中。

所以ConnectedPipeLines.Add(p);被处死了。

我有一个函数可以更改任何组件的流,我想遍历每个组件并执行component.CalculateFlow(),然后我可以执行pipeline.CalculateFlow()来重新计算管道的流,因为endComponent从管道流中获取它的流。

我就是这样做的,但是如果我调试它,找出当前管道中正在连接的哪两个组件,它只会重新计算第一级(组件A1和AB),而不会重新计算组件A10和组件A11。我哪里错了?

代码语言:javascript
复制
foreach(var pipe in pump.Output.StartComponent.ConnectedPipeLines) {
 pipe.EndComponent.CalculateFlow();

 foreach(var p in pipe.EndComponent.ConnectedPipeLines) {
  p.EndComponent.CalculateFlow();

  foreach(var item in p.EndComponent.ConnectedPipeLines) {
   item.EndComponent.CalculateFlow()
  }
 }
}
EN

回答 1

Stack Overflow用户

发布于 2017-01-28 01:26:12

您可以向下递归地向下递归。如下所示:

代码语言:javascript
复制
calculateDownstreamFlow(pump.Output.StartComponent.ConnectedPipeLines);

function void calculateDownstreamFlow(List<Pipeline> pipes) {
  foreach(var pipe in pipes) {
    pipe.EndComponent.CalculateFlow();
    calculateDownstreamFlow(pipe.EndComponent.ConnectedPipeLines);
   }
 }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41899216

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档