2016-08-08 4 views
3

Мне нужно сохранить файлы в алфавитном порядке.
Теперь мой код сохранения файлов в числовом порядкеКак увеличить число строк в Swift

1.png
2.png
3.png
...

Проблема заключается в том, когда я прочитал эти файлы снова Я прочитал эти файлы, как описано here


Так что я думал об изменении кода и в s пр файлы не в числовом порядке, но в алфавитном порядке как:

a.png
b.png
c.png
...
z.png
aa.png
ab.png
...

Но Swift это трудно увеличивать даже характер типа.
Как я могу начать с:

var s: String = "a" 

и увеличиваем s таким образом?

+0

Итак, вы хотите, чтобы сопоставить эти числовые имена тех, содержащих букву? Что это связано с приростом? – Alexander

+0

нет. Так я и сейчас сохраняю файлы. Я думал о сохранении файлов в алфавитном порядке, а не в числовом, как сейчас. Я постараюсь объяснить лучше. – Danny182

+0

'Я думал о сохранении файлов в алфавитном порядке, а не в числовом, как сейчас». Итак, вы хотите сопоставить эти числовые имена тем, которые содержат буквы. – Alexander

ответ

1

Вставьте этот код в поле для игры и проверьте результат. 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" 
4

Вы можете сохранить его числовым, просто используйте правильный выбор при сортировке:

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"] 
0

Если вы действительно хотели бы сделать их в алфавитном порядке, попробуйте этот код, чтобы увеличить имена:

/// 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
...

Смежные вопросы