This is the fastest and best so far: 
    
    
    proc commonPrefix*(paths: openArray[string], sep = "/"): string =
      if len(paths) == 0:
        return ""
      let first = paths[0]
      var index = -1
      block loop:
        for i in 0 ..< len(first):
          for j in 1 .. paths.high():
            let path = paths[j]
            if i < len(path) and first[i] != path[i]:
              break loop
          index = i
      if index == -1:
        return ""
      else:
        return first[0 .. first.rfind(sep, 0, index)]
    
    
    Run

Reply via email to