Visualizzazione dei risultati da 1 a 10 su 10

Hybrid View

  1. #1
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,589
    Quote Originariamente inviata da MItaly Visualizza il messaggio
    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);
            sb.Append("</li>");
        }
        sb.Append("</ul>");
    }
    Proprio di questo parlavo, l'avrei scritto io se ne avessi avuto il tempo. Tuttavia manca comunque parte della soluzione, una chiamata ricorsiva ci vuole comunque...
    (Ed ecco che perché le cose vanno scritte oltre che pensate, avevo tralasciato questo dettaglio)
    Resta comunque più efficiente.
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  2. #2
    Quote Originariamente inviata da Scara95 Visualizza il messaggio
    Proprio di questo parlavo, l'avrei scritto io se ne avessi avuto il tempo. Tuttavia manca comunque parte della soluzione, una chiamata ricorsiva ci vuole comunque...
    Wops, nella foga di reimpararmi le collection di C# mi ero perso la chiamata ricorsiva, ora dovrebbe essere corretto.
    (Ed ecco che perché le cose vanno scritte oltre che pensate, avevo tralasciato questo dettaglio)
    E aggiungo: ed ecco perché vanno provate oltre che scritte e pensate.
    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.