如何在图中找到元素?

我有以下实体:

  1. 形式

  2. 堵塞

  3. 细胞

  4. 场地

根元素是Form

里面From是放置的Block

Block包含一些Rows,每个都Row可以包含一些Cell内部具有不同内容的内容:Field或者BlockBlock它又是嵌套结构Block -> Rows -> Cells -> Field/Block

它是从根Form到终点的有向有限图FieldBlock

只有BlockField实体具有getId()返回顶点 id 的方法。基于此,我构建了从 root 到具体 vertex 的路径(Blcok, Field)

我试图检查具体的顶点实体(Block)是否按路径呈现在图形中,所以我的解决方案是:

  1. 从我们开始的地方设置当前顶点(块),设置顶点的收入路径

  2. 循环获取当前顶点的所有行(块)

  3. 然后在第一个循环中使用循环从每行中获取所有单元格

  4. 然后从每个单元格(字段,块)中获取内容

  5. 检查它是否是 Block 然后获取它id并与传入的路径(id)进行比较

  6. 如果不相等,则将找到的块设置为当前块(for循环)

  7. 继续,直到我找不到路径

代码是:


function getBlockFieldByPath(block: Block, path: string) {

   let currentBlock = block;

   let irows = 0;

   let jcells = 0;


   while(irows < currentblock.getRows().length) {

       let cells = rows[irows].getCells();

       while(jcells < cells.length) {

           let content = cells[jcells].getContent(); // it is should be Block or Field,


           if (content.getId() == path) {

               return content;

           }


           if (content == Block) {

              currentblock = content; // Because content is Block

           }


          jcells++;

       }

     irows++;

   }   


}

我的错误在哪里?


大话西游666
浏览 132回答 1
1回答

九州编程

通过一些抽象,您可以得到一个节点是块的图。其中一些是微不足道的叶子。您只想对图表进行 dfs,直到找到与您的路径字符串匹配的块function dfs(block, path) {&nbsp; if (block.getId() === path) return block&nbsp; let found = null&nbsp; block.getRows().find(r => r.getCells().find(bContent => {&nbsp; &nbsp; let b = bContent.getContent()&nbsp; &nbsp; found = dfs(b, path)&nbsp; &nbsp; return found&nbsp; }))&nbsp; return found}堆栈的变化function dfs(block, path) {&nbsp; const stack = [block]&nbsp; while (stack.length) {&nbsp; &nbsp; const b = stack.pop()&nbsp; &nbsp; if (b.getId() === path) return block&nbsp; &nbsp; b.getRows().forEach(r => r.getCells().forEach(bContent => {&nbsp; &nbsp; &nbsp; let b = bContent.getContent()&nbsp; &nbsp; &nbsp; stack.push(b)&nbsp; &nbsp; })&nbsp; }&nbsp; return null}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript