我试着排序
let students: NSMutableArray = [["fullName": "23412334", "number": "39485793"],["fullName": "&234@fwv", "number": "395793"],["fullName": "Abena", "number": "3572343"],["fullName": "Peter", "number": "394568993"],["fullName": "Kweku", "number": "309693"]]
let sortDescriptor = NSSortDescriptor(key: "fullName", ascending: true, selector: #selector(NSString.localizedCompare(_:)))
let sortedResults: NSArray = students.sortedArray(using: [sortDescriptor]) as NSArray
students = NSMutableArray(array: sortedResults)
print(students)
// Output:
(
{
fullName = "&234@fwv";
number = "395793";
},
{
fullName = "23412334";
number = "39485793";
},
{
fullName = "Abena";
number = "3572343";
},
{
fullName = "Kweku";
number = "309693";
},
{
fullName = "Peter";
number = "394568993";
}
)
但我需要:
// Output:
(
{
fullName = "Abena";
number = "3572343";
},
{
fullName = "Kweku";
number = "309693";
},
{
fullName = "Peter";
number = "394568993";
},
{
fullName = "23412334";
number = "39485793";
},
{
fullName = "&234@fwv";
number = "395793";
},
)
请帮助我如何对此进行排序....提前非常感谢...
给你
func isDigit(c: UnicodeScalar) -> Bool {
let digits = CharacterSet.decimalDigits
return digits.contains(c)
}
func isAlphabet(c : UnicodeScalar) -> Bool {
let letters = CharacterSet.letters
return letters.contains(c)
}
func getSpecialSorted ( arrayOfStudents : [[String : String]]) -> [[String : String]] {
var arrayStartingWithAlphabets = [[String : String]]()
var arrayStartingWithDigits = [[String : String]]()
var arrayStartingWithAlphanumeric = [[String : String]]()
for student in arrayOfStudents {
if isDigit(c: (student["fullName"]?.unicodeScalars.first!)!) {
arrayStartingWithDigits.append(student)
} else if isAlphabet(c:(student["fullName"]?.unicodeScalars.first!)!) {
arrayStartingWithAlphabets.append(student)
} else {
arrayStartingWithAlphanumeric.append(student)
}
}
arrayStartingWithAlphabets = getNormalSorted(array : arrayStartingWithAlphabets)
arrayStartingWithDigits = getNormalSorted(array: arrayStartingWithDigits)
arrayStartingWithAlphanumeric = getNormalSorted(array: arrayStartingWithAlphanumeric)
return arrayStartingWithAlphabets + arrayStartingWithDigits + arrayStartingWithAlphanumeric
}
func getNormalSorted(array : [[String : String]]) -> [[String: String]]{
let sortedArray = array.sorted { (firstStudent, secondStudent) -> Bool in
if let firstName = firstStudent["fullName"] , let
secondName = secondStudent["fullName"] {
return firstName.compare(secondName) == ComparisonResult.orderedAscending
}
return false
}
return sortedArray
}
你还需要改变你的声明
let students = [["fullName": "23412334", "number": "39485793"],["fullName": "&234@fwv", "number": "395793"],["fullName": "Abena", "number": "3572343"],["fullName": "Peter", "number": "394568993"],["fullName": "Kweku", "number": "309693"]]
let sortedResults = getSpecialSorted(arrayOfStudents: students)
print(sortedResults)