Budowanie drzewa hierarchicznego z linków

0

Witam,
Załóżmy że mam listę stringów , gdzie każdy z nich jest adresem URL pewnej strony.
Muszę zbudować drzewo hierarchiczne z takich linków (przypisując odpowiedni skrót, dla danego linku)

dla przykładu:
www.4programmers.net/strona1.html - to będzie : d_1_1
www.4programmers.net/strona2.html - to będzie : d_1_2
www.4programmers.net/strona3.html - to będzie : d_1_3
www.4programmers.net/ProgramowanieC/strona1.html - to będzie : d_1_1_1
www.4programmers.net/ProgramowanieC/strona2.html - to będzie : d_1_1_2
www.4programmers.net/ProgramowanieC/Algorytmy/strona1.html - to będzie : d_1_1_1_1
www.4programmers.net/ProgramowanieC/Algorytmy/strona2.html - to będzie : d_1_1_1_2
www.4programmers.net/ProgramowanieJava/strona1.html - to będzie : d_1_2_1

macie jakieś pomysły na taki algorytm ?
może jest jakaś gotowa biblioteka która mogłaby pomóc ?

0

Algorytm prosty - hash mapa, której elementem są hash mapy. Dzielisz string po / i wstawiasz po kolei do map aż do wyczerpania elementów. Możesz sobie do tego łatwo dodać jakąś numerację do każdej mapy.

0

Dla ścisłości , proponujesz coś takiego? :

Dictionary<Dictionary<string, string>, int> slownik = new Dictionary<Dictionary<string, string>, int>();

możesz dokładniej opisać jak widzisz zapisywanie do tych słowników ?

0

Do rozwiązania podobnego problemu popełniłem coś takiego w Pythonie:

def addFile(self,path):
	currentFile=self.files
	dirs=path.split('/')
	fname=dirs[-1]
	dirs=dirs[:-1]
	for d in dirs:
		if d not in currentFile:
			currentFile[d]={}
		currentFile=currentFile[d]
	currentFile[fname]=None

W języku ze statycznym typowaniem zrobiłbym coś takiego:

    
class DictObject
    {
        public Dictionary<string, DictObject> data;
        public int idx;       //Dla numeru porządkowego w słowniku ojcu
        public int addIdx; //Indeks ostatnio dodanego elementu.
    } 

Ja użyłem nulla do oznaczenia, że dana nazwa nie jest katalogiem, nie wiem czy to jest dobre rozwiązanie w większym projekcie (choć jak wszystko się zamyka w jednej klasie to nie powinno być z tym dużego problemu). Szczególnie takie rozwiązanie odpada, gdy musisz przechowywać numer porządkowy, wtedy zrobiłbym ten DictObject klasą bazową z indeksem, mającą dwie klasy pochodne, jedną ze słownikiem (oznaczającą katalog), drugą z niczym (oznaczającą plik).

1 użytkowników online, w tym zalogowanych: 0, gości: 1