Wie Sie die Dateien durch die Anzahl sortieren möchten Sie zuerst den Pfad zu analysieren haben, es zu erreichen, so nehmen wir an, wir die folgende Reihe von NSURL
Objekte haben:
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")! ]
Wir können die pathComponents
Eigenschaft verwenden um ein Array mit allen Komponenten im Pfad für eine NSURL
(zB ["/", "path", "to", "user", "folder", "2.PNG"]
) zu extrahieren.
Wenn wir sehen, können wir die Dateien durch das letzte Element im Array bestellen, das ist der Dateiname, der die Erweiterung und den Punkt entfernt ("."
), in diesem Fall die Nummer. Mal sehen, wie es in dem folgenden Code zu tun:
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])
}
In dem obigen Code wird die Funktion verwenden sortInPlace
, um ein anderes Array zu vermeiden erstellen mit den sortierten Elemente, aber Sie sort
stattdessen verwenden können, wenn Sie wollen. Der andere wichtige Punkt im Code ist die Zeile return Int(v1[0]) < Int(v2[0])
, in dieser Zeile müssen wir die Zahl in der Zeichenkette in eine reelle Zahl umwandeln, denn wenn wir die beiden Zeichenketten "2"
und "100"
vergleichen, ist die zweite weniger als größer als die Zeichenkette werden lexikographisch verglichen.
[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]
EDIT:
So das das Array urls
wie die folgende sein sollte
Die beiden Funktionen pathComponents
und componentsSeparatedByString
erhöhen den Raum Komplexität des sortInPlace
Algorithmus, Wenn Sie sicher sein können, dass der Pfad für die Dateien immer gleich ist, außer dass der Dateiname eine Nummer ist, die Sie verwenden können Verwenden Sie stattdessen diesen Code:
urls.sortInPlace { $0.absoluteString.compare(
$1.absoluteString, options: .NumericSearch) == .OrderedAscending
}
Ich hoffe, das hilft Ihnen.
Sie müssen die 'sort' -Funktion mit einer benutzerdefinierten Schließung verwenden, die angibt, wie ein beliebiges Paar von Elementen in der Sortierung verglichen wird. Diese Schließung müsste die Zahlen von den gegebenen 'NSURLs analysieren, um sie zu vergleichen. – Alexander
Nennen Sie einfach Ihre Bilder 0001.png, 0002.png, ... sollte es ohne komplexe Programmierung besser funktionieren – FredericP