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

AW: Baumstruktur aus Liste erzeugen

  Alt 13. Jan 2015, 14: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 14:48 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.643 Beiträge
 
#2

AW: Baumstruktur aus Liste erzeugen

  Alt 13. Jan 2015, 14:51
Also erstmal die Baumstruktur:

Code:
// create test data
   var list = new [] {
      new Node() { Id=1, Description="Beschreibung 1", ParentId = 0 },
      new Node() { Id=2, Description="Beschreibung 2", ParentId = 0 },
      new Node() { Id=3, Description="Beschreibung 3", ParentId = 2 },
      new Node() { Id=4, Description="Beschreibung 4", ParentId = 2 },
      new Node() { Id=5, Description="Beschreibung 5", ParentId = 4 },
      new Node() { Id=6, Description="Beschreibung 6", ParentId = 0 },
      new Node() { Id=7, Description="Beschreibung 7", ParentId = 6 },   
   };
   
   // make a lookup to quickly build the structure -> O(n)
   var lookup = list.ToLookup(node => node.ParentId);
   
   // hook up the nodes (also O(n))
   var tree = new List<Node>();   
   foreach (var node in list)
   {
      // if root node, add to tree
      if (node.ParentId == 0)
         tree.Add(node);

      // hook in all children
      node.Children = lookup[node.Id].ToList();
   }
Was das serialisieren nach Json angeht, schau Dir am besten mal Newtonsoft.Json an: https://www.nuget.org/packages/Newtonsoft.Json/
Das ist *das* Library in .NET wenn es um Json geht. Selbst Microsoft setzt in vielen Teilen seiner Web-Libraries inzwischen darauf.

Das ist dann ein Einzeiler:
Code:
string jsonString = JsonConvert.SerializeObject(tree);
Der JsonString sieht dann so aus:
Code:
[
   {"Id":1,"ParentId":0,"Description":"Beschreibung 1","Children":[]},
   {"Id":2,"ParentId":0,"Description":"Beschreibung 2","Children":
      [
         {"Id":3,"ParentId":2,"Description":"Beschreibung 3","Children":[]},
         {"Id":4,"ParentId":2,"Description":"Beschreibung 4","Children":
            [
               {"Id":5,"ParentId":4,"Description":"Beschreibung 5","Children":[]}
            ]
         }
      ]
   },
   {"Id":6,"ParentId":0,"Description":"Beschreibung 6","Children":
      [
         {"Id":7,"ParentId":6,"Description":"Beschreibung 7","Children":[]}
      ]
   }
]
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  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 13. Jan 2015, 14:56
Hi Phoenix,

wow fett, vielen Dank dafür . Der Punkt, an dem ich gerade stocke ist, dass die ID's in der Ausgangsliste nicht eindeutig sind - sie geben sozusagen nur die Tiefe vor. Die Reihenfolge aber schon!
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.643 Beiträge
 
#4

AW: Baumstruktur aus Liste erzeugen

  Alt 13. Jan 2015, 15:01
Inwiefern sind die ID's nicht eindeutig?

Wenn die Reihenfolge passt, dann nimm doch einfach ne klassische Zählerschleife über (i = 0; i < list.Count; i++) und benutz den index als ID.
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  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 13. Jan 2015, 15:13
Hi,

das sind keine ID's sondern das Level (also die Tiefe des Eintrags im Baum). Wenn ich da mit einer for-Schleife durchlaufe muss ich immer den letzten und nächsten Wert zusätzlich vergleichen, korrekt?

Danke für deine Hilfe!
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.643 Beiträge
 
#6

AW: Baumstruktur aus Liste erzeugen

  Alt 13. Jan 2015, 15:23
Ah, nein.
Dann ist das noch einfacher: Du kannst Dir den Lookup sparen und musst nur den vorherigen Knoten angucken.

Wenn die aktuelle Zahl eins höher ist als die des Vorgängers, dann ist es ein Kind von diesem.
Wenn die Zahl gleich ist, ist die ein Kind von dessen Parent.
Wenn die Zahl kleiner ist, musst Du vom Vorgänger so viele Ebenen (parents) hoch wie die Differenz ist, und dort einhängen.
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  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:31
Ok, danke ich werd mich mal probieren
  Mit Zitat antworten Zitat
Alt 13. Jan 2015, 15:11     Erstellt von fillibuster
Dieser Beitrag wurde von Phoenix gelöscht. - Grund: Doppelpost
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 21:44 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-2025 by Thomas Breitkreuz