我正在将大量图像路径加载到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进行排序,还是在我加载图像路径或加载图像路径时?
答案 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
我希望这对你有所帮助。