AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Baumstruktur aus Liste erzeugen

Ein Thema von fillibuster · begonnen am 1. Dez 2014 · letzter Beitrag vom 13. Jan 2015
Antwort Antwort
fillibuster

Registriert seit: 3. Nov 2010
Ort: Coesfeld
245 Beiträge
 
Delphi 2010 Professional
 
#1

Baumstruktur aus Liste erzeugen

  Alt 1. Dez 2014, 15:09
Hallo,

ich versuche gerade eine Baumstruktur (Treeview) aus einer Liste zu erzeugen. Diese hat folgendes Format:

1;Beschreibung 1
1;Beschreibung 2
2;Beschreibung 3
2;Beschreibung 4
3;Beschreibung 5
1;Beschreibung 6
2;Beschreibung 7

Das einlesen und erzeugen von Knoten ist kein Problem, aber ich weiß nicht, wie ich die Struktur erzeugen kann. Sollte so aussehen:

Code:
Beschreibung 1
Beschreibung 2
  |- Beschreibung 3
  |- Beschreibung 4
         |- Beschreibung 5
Beschreibung 6
  |- Beschreibung 7
Hat jemand einen Tipp für mich? Danke!
  Mit Zitat antworten Zitat
Benutzerbild von baumina
baumina

Registriert seit: 5. Mai 2008
Ort: Oberschwaben
1.275 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Baumstruktur aus Liste erzeugen

  Alt 1. Dez 2014, 15:40
So richtig hab ich deine Frage nicht verstanden, du kannst die Liste einlesen und du kannst Knoten erzeugen wie in diesem Codebeispiel. Was fehlt denn jetzt noch genau?

EDIT: Achso für C# natürlich dann z.B. hier
Hinter dir gehts abwärts und vor dir steil bergauf ! (Wolfgang Ambros)

Geändert von baumina ( 1. Dez 2014 um 15:49 Uhr)
  Mit Zitat antworten Zitat
fillibuster

Registriert seit: 3. Nov 2010
Ort: Coesfeld
245 Beiträge
 
Delphi 2010 Professional
 
#3

AW: Baumstruktur aus Liste erzeugen

  Alt 1. Dez 2014, 15:50
Hi,

ich habe ein Problem die Baumstruktur zu erzeugen. Die Nodes sollen ja nicht alle einfach auf die oberste Ebene gepackt werden!

Viele Grüße ...
  Mit Zitat antworten Zitat
Benutzerbild von JasonDX
JasonDX
(CodeLib-Manager)

Registriert seit: 5. Aug 2004
Ort: München
1.062 Beiträge
 
#4

AW: Baumstruktur aus Liste erzeugen

  Alt 1. Dez 2014, 15:55
Hier ein Stück Pseudocode das das ganze Lösen sollte:
Code:
var recentNode = root(); // depth = 0
for ([depth, element] in list)
  parentNode = recentNode
  while (parentNode.depth >= depth)
    parentNode = parentNode.parent
  parentNode.addChild(element)
  recentNode = element
(ungetestet, erwartet gültige Tiefenangaben)

[add]Erklärung: Der Code merkt sich den zuletzt hinzugefügten Knoten. Dann hangelt er sich den Baum hoch, bis die richtige Tiefe erreicht ist, und fügt dann das nächste Kind ein.
Mike
Passion is no replacement for reason

Geändert von JasonDX ( 1. Dez 2014 um 15:59 Uhr)
  Mit Zitat antworten Zitat
fillibuster

Registriert seit: 3. Nov 2010
Ort: Coesfeld
245 Beiträge
 
Delphi 2010 Professional
 
#5

AW: Baumstruktur aus Liste erzeugen

  Alt 1. Dez 2014, 17:04
Hallo,

danke werde ich mal in Ruhe testen

Viele Grüße ...
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: Baumstruktur aus Liste erzeugen

  Alt 1. Dez 2014, 17:53
Grundsätzlich gesehen ist diese Art der Liste für einen Baum relativ wackelig.

Besser wäre es eine Liste mit einem Index und ParentIndex zu verwenden
idxpidxDescription
10Beschreibung 1
20Beschreibung 2
32Beschreibung 3
42Beschreibung 4
54Beschreibung 5
60Beschreibung 6
76Beschreibung 7
Dabei sind in diesem Beispiel die Root-Elemente, die mit pidx=0.

Nun ist es völlig egal, in welcher Reihenfolge diese Daten vorliegen, der Baum kann immer korrekt erstellt werden.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
fillibuster

Registriert seit: 3. Nov 2010
Ort: Coesfeld
245 Beiträge
 
Delphi 2010 Professional
 
#7

AW: Baumstruktur aus Liste erzeugen

  Alt 13. Jan 2015, 15:17
Hallo,

@Sir Rufo: mach ich immer so, wenn eine Datenbank im Programm vorhanden ist - find ich auch einfacher!

Jetzt habe ich aber dazu noch eine Frage. Weiß jemand, wie ich diese Struktur am einfachsten nach JSON bekomme? Also komplett ohne Treeview (Baumstruktur soll aber in JSON enthalten sein). Json.net habe ich jetzt erstmal installiert und eine Klasse für die Einträge erstellt:

Code:
    public class navigationItem
    {
        public string key { get; set; }
        public string title { get; set; }
        public string meta { get; set; }
        public string icon { get; set; }
        public string tooltip { get; set; }
        public string document { get; set; }
        public string mime { get; set; }
        public string filetype { get; set; }
        public List<navigationItem> children { get; set; }
    }
Jetzt sitze ich an einer rekursiven Funktion und brauch nen Denkanstoss (configList ist die eingelesene Liste):
Code:
   private string createTree(List<string> configList, List<navigationItem> navigationList)
   {   
       return JsonConvert.SerializeObject(navigationList);
   }
Danke

Geändert von fillibuster (13. Jan 2015 um 15:48 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:56 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz