订购NSURL阵列

时间:2016-08-07 23:10:15

标签: swift sorting nsurl

我正在将大量图像路径加载到NSURL中。 图像位于从1.PNG,2.PNG,3.PNG到1500.PNG订购的文件夹中。
当我试图加载它们时:

let imagePath = path + "/images"
        let url = NSURL(fileURLWithPath: imagePath)
        print(url)
        let fileManager = NSFileManager.defaultManager()
        let properties = [NSURLLocalizedLabelKey,
                          NSURLCreationDateKey, NSURLLocalizedTypeDescriptionKey]

        do {
            imageURLs = try fileManager.contentsOfDirectoryAtURL(url, includingPropertiesForKeys: properties, options:NSDirectoryEnumerationOptions.SkipsHiddenFiles)
        } catch let error1 as NSError {
            print(error1.description)
        }

imageURLs数组填充:

  

imageURLs [0] = ... \ 0.PNG
   imageURLs [1] = ... \ 1.PNG
    imageURLs [2] = ... \ 100.PNG
    imageURLs [3] = ... \ 1000.PNG

而不是数字顺序!
有人可以帮助对imageURL进行排序,还是在我加载图像路径或加载图像路径时?

1 个答案:

答案 0 :(得分:3)

由于您要按编号对文件进行排序,首先需要解析实现它的路径,因此我们假设我们有以下NSURL个对象数组:

var urls = [NSURL(string: "file:///path/to/user/folder/2.PNG")!, NSURL(string: "file:///path/to/user/folder/100.PNG")!, NSURL(string: "file:///path/to/user/folder/101.PNG")!, NSURL(string: "file:///path/to/user/folder/1.PNG")! ]

我们可以使用pathComponents属性来提取包含NSURL路径中所有组件的数组(例如["/", "path", "to", "user", "folder", "2.PNG"])。

如果我们看到我们可以通过数组中的最后一个元素来排序文件,即删除扩展名和点(".")的文件名,在这种情况下是数字。让我们看看如何在以下代码中执行此操作:

urls.sortInPlace {

   // number of elements in each array
   let c1 = $0.pathComponents!.count - 1
   let c2 = $1.pathComponents!.count - 1

   // the filename of each file
   var v1 = $0.pathComponents![c1].componentsSeparatedByString(".")
   var v2 = $1.pathComponents![c2].componentsSeparatedByString(".")

   return Int(v1[0]) < Int(v2[0])
}

在上面的代码中,我们使用函数sortInPlace来避免创建另一个元素已排序的数组,但如果需要,可以使用sort。代码中的另一个重点是行return Int(v1[0]) < Int(v2[0]),在这一行中我们必须将字符串中的数字转换为实数,因为如果我们比较两个字符串"2"和{{1}第二个小于大于因为字符串按字典顺序进行比较。

所以数组"100"应该如下所示:

urls
  

修改

[file:///path/to/user/folder/1.PNG, file:///path/to/user/folder/2.PNG, file:///path/to/user/folder/100.PNG, file:///path/to/user/folder/101.PNG] pathComponents这两个函数会增加componentsSeparatedByString算法的空间复杂度,如果你可以确保文件的路径总是相同的,除了它&#39; s文件名应该是一个数字,你可以使用这个代码:

sortInPlace

我希望这对你有所帮助。