Недялко обнови решението на 15.10.2013 08:21 (преди над 4 години)
+package main
+
+import "strings"
+
+func parsePath(path string) string {
+ parts := strings.Split(path, "/")
+ resultParts := make([]string, len(parts))
+ pathLength := 0
+
+ for i := range parts {
+ if parts[i] == ".." {
+ if pathLength > 0 {
+ pathLength--
+ }
+ } else if parts[i] != "." && parts[i] != "" {
+ resultParts[pathLength] = parts[i]
+ pathLength++
+ }
+ }
+
+ result := "/" + strings.Join(resultParts[:pathLength], "/")
+ if pathLength > 0 {
+ result += "/"
+ }
+
+ return result
+}
Страхотно решение. Единственото подобрение което мога да ти предложа да направиш е да замениш заделянето с make за resultParts с resultParts := []string{} и да използваш append за добавяне. Така няма да ти се налага да заделяш "голямо" количество памет в началото а то ще се добавя когато ти трябва.
Благодаря за коментара. Ще прегледам по-добре как работи цялата схема с make, append, slicing и т.н., защото само набързо прочетох част от документация и доста от нещата не ги разбрах напълно :)