ios - 如何在 Swift 中对 Json 字典数组值进行排序(A-z、0-9 和特殊字符)

标签 ios json swift nsdictionary

<分区>

我试着排序

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)

关于ios - 如何在 Swift 中对 Json 字典数组值进行排序(A-z、0-9 和特殊字符),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45293778/

相关文章:

ios - 缩放和 ScrollView

ios - 失败(POSIXErrorCode : Address already in use)

json - 如何在 Alamofire 请求 swift 3 上发出警报

ios - 如何在 spriteKit swift 中降低 Sprite 的速度?

objective-c - 在 Objective C 类文件中调用 swift 完成 block 。错误: parameter name omitted

ios - app delege didfinishlaunching 在 iOS 状态恢复期间未调用

ios - Objective-c,有没有办法从 URL 获取视频缩略图而不是使用 MPMoviePlayerController 和 AVAssetImageGenerator?

c# - 我如何将带有动态变量的 JSON 反序列化为一个类

java - 它是一个正确的 JSON 文件吗?

ios - 如何在 Swift 中更新核心数据中的任何属性?