をここにあなたのケースのために機能するソリューションです:
期待される結果は次のとおりです。最初
これを行う方法があります。
// Works with both arrays
var array = ["1", "b", "a", "z", "3", "!"]
//var array = ["1", "b", "A", "Z", "3", "!"]
func isLetter(char: String) -> Bool {
return ("a"..."z").contains(char) || ("A"..."Z").contains(char)
}
func isNumber(char: String) -> Bool {
return Int(char) != nil
}
let letters = array.filter(isLetter).sort{$0.lowercaseString < $1.lowercaseString}
let numbers = array.filter(isNumber).sort{Int($0) < Int($1)}
let others = Array(Set(array).subtract(letters).subtract(numbers)).sort{$0 < $1}
let sortedArray = letters + numbers + others
最初の配列は、第二は、それはあなたが何をしたいん
["A", "b", "Z", "1", "3", "!"]
だろう
["a", "b", "z", "1", "3", "!"]
だろう。単体テストを含め、メソッドの中にラップしておいてください。 Buuuut、それは全く「きれい」ではありません。
so?なぜあなたはちょうどそれをやろうとしないのですか?明らかに 'firstObject
luk2302
ここでの並べ替えのルールは何ですか?なぜ "!"ソートされた配列の終わりですか? – larva
希望の結果が一般的な順序付け規則と異なる場合、この作業にはカスタム解決策が必要です(感嘆符が最後にあり、アルファベット文字の後ろに数字があるため)。 – pedrouan