Visualizzazione dei risultati da 1 a 10 su 10

Visualizzazione discussione

  1. #7
    Quote Originariamente inviata da Scara95 Visualizza il messaggio
    Certo che in realtà scorri tutta la lista un numero impressionante di volte per il compito da risolvere e ci sono soluzioni possibili in 2 passaggi (e una struttura di supporto).

    Vero è anche che in generale, per le dimensioni di un menù, non si presenterà alcun problema e non c'è gran spreco di risorse.
    Ovviamente concordo su entrambe le considerazioni, era più che altro per rendere l'idea. La soluzione più corretta probabilmente sarebbe una multimap (parentID -> (ID, Nome)), in cui l'accesso agli elementi desiderati è O(1).
    codice:
    string buildMenu(Element elem[])
    {
        Dictionary<int, List<Element> > d;
        foreach(Element e in elem)
        {
            if(!d.ContainsKey(e.parentID))
                d[parentID]=new List<Element>();
            d[parentID].Add(e);
        }
        StringBuilder sb;
        buildItems(d, 0, sb);
        return sb.toString();
    }
    
    void buildItems(Dictionary<int, List<Element> > d, int parentID, StringBuilder sb)
    {
        sb.Append("<ul>");
        List<Element> l = d[parentID];
        foreach(Element e: l)
        {
            sb.Append("<li>");
            sb.Append(e.name);
            buildItems(d, e.ID, sb);
            sb.Append("</li>");
        }
        sb.Append("</ul>");
    }
    Ultima modifica di MItaly; 01-07-2014 a 15:25 Motivo: Ricorsione persa per strada :-/
    Amaro C++, il gusto pieno dell'undefined behavior.

Tag per questa discussione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.