如何 Json 字典数组值排序,如 Swift 中的(A-z、0-9 和特殊字符)

how to Json Dictionary Array value sorting like (A-z, 0-9 and special char) in Swift

我试着排序

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)