我需要按字母順序保存文件。
按數字順序現在我的代碼保存文件如何在Swift中增加字符串
1.png
2.png
3.png
...
的問題是,當我讀到這個文件再次我讀到這個文件描述here
所以我想改變代碼和s AVE不是一個數字順序,但在字母順序的文件:
a.png
b.png
c.png
...
z.png
aa.png
ab.png
...
但是在斯威夫特很難增加甚至字符類型。
如何從我做起:
var s: String = "a"
,並增加在那隻方式?
我需要按字母順序保存文件。
按數字順序現在我的代碼保存文件如何在Swift中增加字符串
1.png
2.png
3.png
...
的問題是,當我讀到這個文件再次我讀到這個文件描述here
所以我想改變代碼和s AVE不是一個數字順序,但在字母順序的文件:
a.png
b.png
c.png
...
z.png
aa.png
ab.png
...
但是在斯威夫特很難增加甚至字符類型。
如何從我做起:
var s: String = "a"
,並增加在那隻方式?
將此代碼粘貼到遊戲場並檢查結果。
n
支持的號碼錶示您可以輸入任何高數字,如:99999999999999欣賞!你可以取消
for loop
代碼來檢查代碼工作正常與否 但不要忘了較小的值賦給變量counter
否則的Xcode就會結冰。
//: Playground - noun: a place where people can play
import UIKit
var fileName:String
var counter:Double = 0
var alphabets:Array = ["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"]
let totalAlphaBets:Double = 26.0
let numFiles = 9999
func getCharacter(counter c:Double) -> String {
var chars:String;
var divisionResult:Int = Int(c/totalAlphaBets)
let modResult:Int = Int(c % totalAlphaBets)
chars = getCharFromArr(index: modResult)
if(divisionResult != 0){
divisionResult -= 1;
if(divisionResult > alphabets.count-1){
chars = getCharacter(counter: Double(divisionResult)) + chars
}else{
chars = getCharFromArr(index: divisionResult) + chars
}
}
return chars;
}
func getCharFromArr(index i:Int) -> String {
if(i < alphabets.count){
return alphabets[i];
}else{
print("wrong index")
return ""
}
}
//for _ in 0...numFiles {
// fileName = getCharacter(counter: counter)
// print(fileName)
// counter += 1;
//}
fileName = getCharacter(counter: numFiles)+".png"
你可以把它的數值,排序時只使用了正確的選擇:
let arr = ["1.png", "19.png", "2.png", "10.png"]
let result = arr.sort {
$0.compare($1, options: .NumericSearch) == .OrderedAscending
}
// result: ["1.png", "2.png", "10.png", "19.png"]
如果你真的很想讓他們按字母順序排列,試試這個代碼將增加的名字:
/// Increments a single `UInt32` scalar value
func incrementScalarValue(_ scalarValue: UInt32) -> String {
return String(Character(UnicodeScalar(scalarValue + 1)))
}
/// Recursive function that increments a name
func incrementName(_ name: String) -> String {
var previousName = name
if let lastScalar = previousName.unicodeScalars.last {
let lastChar = previousName.remove(at: previousName.index(before: previousName.endIndex))
if lastChar == "z" {
let newName = incrementName(previousName) + "a"
return newName
} else {
let incrementedChar = incrementScalarValue(lastScalar.value)
return previousName + incrementedChar
}
} else {
return "a"
}
}
var fileNames = ["a.png"]
for _ in 1...77 {
// Strip off ".png" from the file name
let previousFileName = fileNames.last!.components(separatedBy: ".png")[0]
// Increment the name
let incremented = incrementName(previousFileName)
// Append it to the array with ".png" added again
fileNames.append(incremented + ".png")
}
print(fileNames)
// Prints `["a.png", "b.png", "c.png", "d.png", "e.png", "f.png", "g.png", "h.png", "i.png", "j.png", "k.png", "l.png", "m.png", "n.png", "o.png", "p.png", "q.png", "r.png", "s.png", "t.png", "u.png", "v.png", "w.png", "x.png", "y.png", "z.png", "aa.png", "ab.png", "ac.png", "ad.png", "ae.png", "af.png", "ag.png", "ah.png", "ai.png", "aj.png", "ak.png", "al.png", "am.png", "an.png", "ao.png", "ap.png", "aq.png", "ar.png", "as.png", "at.png", "au.png", "av.png", "aw.png", "ax.png", "ay.png", "az.png", "ba.png", "bb.png", "bc.png", "bd.png", "be.png", "bf.png", "bg.png", "bh.png", "bi.png", "bj.png", "bk.png", "bl.png", "bm.png", "bn.png", "bo.png", "bp.png", "bq.png", "br.png", "bs.png", "bt.png", "bu.png", "bv.png", "bw.png", "bx.png", "by.png", "bz.png"]`
你終將結束了
a.png
b.png
c.png
...
z.png
aa.png
ab.png
...
zz.png
aaa.png
aab.png
...
所以你想映射這些數字名稱到包含字母?這與增加有什麼關係? – Alexander
沒有。這就是我現在保存文件的方式。我正在考慮按字母順序保存文件,而不是現在的數字。我會盡力解釋更好。 – Danny182
'我正在考慮按照字母順序保存文件,而不是現在的數字。'...所以你想要將這些數字名稱映射到包含字母的數字。 – Alexander