【问题标题】:Convert a nested structure to flat? [duplicate]将嵌套结构转换为平面结构? [复制]
【发布时间】:2016-06-08 14:46:02
【问题描述】:

我有一个嵌套结构如下:

       arr[3].title="a3";        
       arr[3].nextArr=[];
       arr[2].title="a2"; 
       arr[2].nextArr=arr[3];
       arr[1].title="a1"; 
       arr[1].nextArr=arr[2];
       arr[0].title="a0"; 
       arr[0].nextArr=arr[1];

喜欢这里!:

|_
  |_
    |_

如您所见,我有一个名为 arr 的数组,其中包含四个成员。

如何从 arr 创建四个单独的数组?

arrayOne=[{title:"a1"},{nextArr:[]}];    
arraytwo=[{title:"a2"},{nextArr:[]}];
.
.
.

更新:我需要在我的 AngularJS controller.js 中进行转换。我收到来自服务器的响应,其中包含上述数组。我必须把它弄平。内部数组的计数不是恒定的。我没有提到这一点,因为我不知道算法。但是,根据答案,如果我解释一下似乎更好。

Result = {arr[title:"a0",nextArr:{title:"a1",nextArr:{title:"a2",nextArr:{......}}}]};

【问题讨论】:

  • arrayOne=arr[1]; arraytwo=arr[2];
  • 它看起来像一个"a0" -> "a1" -> "a2" -> [] 单链表。但是nextArray 字段的类型是什么?它如何同时指向[]title, nextArray 两个字段的结构?如果是列表,列表遍历算法就可以了。
  • 所有数组都有相似的类型。在最后一个,下一个数组是一个空数组。我更新了问题。

标签: javascript angularjs algorithm


【解决方案1】:

您可以使用yield 创建一个递归遍历层次结构的枚举器:

public IEnumerable<{class}> Flatten({class}[] data)
{
    foreach({class} parent in data)
    {
        yield return parent;

        foreach({class} child in flatten(parent.nextArr))
            yield return child;
    }
}

【讨论】:

  • 您是否需要遍历 data 数组中的对象才能使其工作。
  • @juharr 谢谢,已修复。
  • 这能回答问题吗?一旦你有了这个方法,你能展示如何得到 OP 说他想要的结果吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多