Есть ли древовидная структура или алгоритм для перетасовки уровни в дереве?

У меня возникла, на мой взгляд, интересная проблема.

В основном, у меня есть список элементов, где каждый элемент имеет фиксированный набор метаданных с разными значениями.

Например:

  • Элемент 1: {Type = "Text", Author = "User A", Edited Date = "03/03/2003"}
  • Пункт 2: {Type = "Table", Author = "User A", Edited Date = "04/05/2006"}
  • Пункт 3: {Type = "Image", Author = "User B", дата редактирования = "05/05/2005"}
  • Пункт 4: {Type = "Text", Author = "User B", Edited Date = "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
  ..

Однако предположим, что вместо этого пользователь хочет перевернуть его и просмотреть все элементы, относящиеся к определенному пользователю:

Items
+ User A
  + Text
  + Table
  -> Item 1
  -> Item 2
+ User B
  + Image
  + Text
  -> Item 3
  -> Item 4

И так на.

Я надеюсь, что это делает s ense.

Итак, вот что меня интересует, есть ли лучший практический подход к достижению этого с низкими затратами? Результат каждого «переворота / перемешивания / поворота» красиво представлен в виде дерева, поэтому очевидно, что первая мысль заключается в том, что когда пользователь запрашивает изменение представления, при необходимости может быть сгенерировано новое дерево из списка элементов. Однако я надеялся, что, возможно, есть лучший способ - просто повернуть одно дерево и т. Д.

Кроме того, это можно было бы сделать с меньшими вычислительными затратами в JavaScript в браузере пользователя, если бы бэкэнд просто возвращал плоский список элементов?

Большое спасибо и добрых пожеланий,

Джейми

9
задан templatetypedef 19 August 2011 в 09:16
поделиться