是否有树结构或算法在树中的水平周围移动?

Jay*_*Jay 9 javascript algorithm tree rotation data-structures

我认为这是一个有趣的问题.

基本上,我有一个项目列表,其中每个项目都有一组固定的元数据,具有不同的值.

例如:

  • 第1项:{Type ="Text",作者="用户A",编辑日期="03/03/2003"}
  • 第2项:{Type ="Table",作者="用户A",编辑日期="04/05/2006"}
  • 第3项:{Type ="Image",作者="用户B",编辑日期="05/05/2005"}
  • 第4项:{Type ="Text",作者="用户B",编辑日期="05/07/2007"}

现在,就目前而言,该项目清单已展平并显示在表格中.

但是,我们希望找到一种方法来允许用户在树中浏览它,但是通过增加的灵活性,他们可以"转动"每个元数据标签的顺序出现在树中.

所以,最初可能看起来像:

Items
+ Table
  + User A
    + 04/05/2006
      -> Item 2
    -> Item 2
  -> Item 2
+ Text
  + User A
    + 03/03/2003
      -> Item 1
    -> Item 1
  + User B
    + 05/07/2007
      -> Item 4
    -> Item 4
  -> Item 1
  -> Item 4
+ Image
  ..
Run Code Online (Sandbox Code Playgroud)

但是,假设用户想要将其翻转并查看与特定用户相关的所有项目:

Items
+ User A
  + Text
  + Table
  -> Item 1
  -> Item 2
+ User B
  + Image
  + Text
  -> Item 3
  -> Item 4
Run Code Online (Sandbox Code Playgroud)

等等.

我希望这是有道理的.

那么,我想知道的是,是否有最佳实践方法以低成本实现这一目标?每个'翻转/随机播放/转轴'的结果很好地表示在树中,因此显然首先想到的是当用户请求更改表示时,可以根据需要生成项目列表的新树.但是,我希望也许有更好的方法,只需旋转一棵树等.

另外,如果后端只是简单地返回一个项目的平面列表,那么可以通过用户浏览器的JavaScript以便宜的方式完成这项工作吗?

非常感谢和亲切的问候,

杰米

Tom*_*son 0

我解决这个问题的方法是定义一个看起来像这样的列表项:

public class Item
{
    string NodeName {get; set;}
    string Url {get; set;}
    List<Item> Children {get; set;}
}
Run Code Online (Sandbox Code Playgroud)

这是 C# 代码,但这个想法应该适用于任何支持对象的语言。现在你的列表只需要支持一种类型的列表,那就是一个列表,Item所以你需要做的就是找到一种方法将你的数据转换为这样的列表。