Gibt es eine Baumstruktur oder einen Algorithmus, um Ebenen in einem Baum zu mischen?

9

Ich habe was ich denke, ist ein interessantes Problem.

Grundsätzlich habe ich eine Liste von Items, wobei jedes Item einen festen Satz von Meta-Daten unterschiedlicher Werte hat.

Zum Beispiel:

  • Eintrag 1: {Type="Text", Author="Benutzer A", bearbeitetes Datum="03/03/2003"}
  • Eintrag 2: {Type="Tabelle", Autor="Benutzer A", bearbeitetes Datum="04/05/2006"}
  • Eintrag 3: {Type="Bild", Autor="Benutzer B", bearbeitetes Datum="05/05/2005"}
  • Eintrag 4: {Type="Text", Autor="Benutzer B", bearbeitetes Datum="05/07/2007"}

Nun, so wie es jetzt aussieht, wird diese Liste von Elementen abgeflacht und in einer Tabelle dargestellt.

Wir möchten jedoch einen Weg finden, den Benutzern das Browsen in einer Baumstruktur zu ermöglichen, aber mit der zusätzlichen Flexibilität, dass sie die Reihenfolge der Meta-Daten-Tags in der Baumstruktur "schwenken" können.

Also könnte es zunächst so aussehen:

%Vor%

Nehmen wir jedoch an, ein Benutzer möchte ihn umdrehen und alle Elemente anzeigen, die sich auf einen bestimmten Benutzer beziehen:

%Vor%

Und so weiter.

Ich hoffe, das macht Sinn.

Ich frage mich daher, ob es einen Best-Practice-Ansatz gibt, um dies zu niedrigen Kosten zu erreichen? Das Ergebnis jedes "flip / shuffle / pivot" wird in einem Baum gut dargestellt. Daher ist der erste Gedanke offensichtlich, dass wenn ein Benutzer die Änderung der Repräsentation anfordert, ein neuer Baum von der Liste der Elemente wie benötigt erzeugt werden könnte. Ich hoffte jedoch, dass es vielleicht einen besseren Weg geben könnte, einfach einen einzelnen Baum zu drehen usw.

Ist das auch etwas, das in JavaScript im Browser des Benutzers rechnerisch billig gemacht werden kann, wenn das Backend einfach eine flache Liste von Items zurückgeben soll?

Vielen Dank & amp; Mit freundlichen Grüßen,

Jamie

    
Jay 18.08.2011, 15:46
quelle

2 Antworten

1

Sie möchten Elemente in einer Baumstruktur darstellen, aber mit einer variablen Baumtiefe und wechselnden Baumverzweigungen: Ich bezweifle, dass eine Baumstruktur wirklich das ist, was Sie wollen.

Ich denke, Sie sollten stattdessen berücksichtigen, dass die Welt flach ist (wie in Ihrem Tisch). Eine Javascript-Datenbank könnte helfen (es gibt Ссылка )

Auch wenn die Welt flach ist, könnten Sie auch eine Signaturfunktion erstellen, die eine Zeichenfolge zurückgibt

%Vor%

Dann speichern Sie Ihre Objekte in einem einfachen Wörterbuch mit dieser Signatur als Schlüssel.

Und dann können Sie eine Regexp-Übereinstimmung für die Schlüssel durchführen, um die gewünschten Objekte zu erhalten. Bearbeiten Sie zuerst die Signaturfunktion, um "([^ Trennzeichen] +)" zurückzugeben, wenn die entsprechende Elementeigenschaft nicht definiert ist.

%Vor%

Ich habe keine Ahnung, ob das schneller ist als das Durchsuchen aller Elemente.

    
rds 19.08.2011 12:33
quelle
0

So würde ich das Problem lösen, indem ich ein Listenelement definiere, das ungefähr so ​​aussieht:

%Vor%

Dies ist c # -Code, aber die Idee sollte in jeder Sprache anwendbar sein, die Objekte unterstützt. Jetzt muss Ihre Liste nur einen Listentyp unterstützen, und das ist eine Liste von Item , also müssen Sie nur einen Weg finden, Ihre Daten in eine solche Liste zu verwandeln.

    
Tomas Jansson 19.08.2011 10:25
quelle