Swift 3:限制.components数组并使用reduce

时间:2016-09-29 14:13:17

标签: arrays swift file components reduce

我尝试获取路径的前n个部分:

var rootPath = "/p1/p2"
var filePath = "/p1/p2/p3/p4/file.ext"

我希望获得比rootPath = 3文件夹深度使用更多的内容:

result = "/p1/p2/p3/"

我尝试使用内置数组组件,但我不知道如何将其限制为特定数字:

func getRootFolderRel(rootURL : URL, fileURL : URL, relIndex : Int) -> String {
    let pccount = rootURL.pathComponents.count + 1

    var count = 0
    return fileURL.pathComponents.reduce("", { count += 1 < pccount ? $0.stringByAppendingPathComponent(pathComponent: $1) : $0 })
}

任何提示? (它应该尽可能快): - )

补充:(我写了一个工作函数,但它没有使用内部命令。一切都是由我完成的,所以我认为,与基于内置函数的解决方案相比,这是非常慢的。)

func getRootFolderRel(rootURL : URL, fileURL : URL, relIndex : Int) -> String {
    let pccount = rootURL.pathComponents.count + relIndex

    var array = [String]()
    var count = 0
    while count < pccount && count < rootURL.pathComponents.count {
        array.append(rootURL.pathComponents[count])
        count += 1
    }

    let offset = count
    while count < pccount && count < fileURL.pathComponents.count {
        array.append(fileURL.pathComponents[count])
        count += 1
    }

    return array.reduce("", { $0.stringByAppendingPathComponent($1) })
}

0 个答案:

没有答案