在 Swift 中对 NSDictionary 对象的 NSArray 进行排序

问题描述 投票:0回答:3

我已经从 API 检索了一些 JSON 数据,现在有一个充满 NSDictionary 对象的 NSArray。每个 NSDictionary 都有一个“名称”的键/值对,我想按该键/值对对 NSArray 进行排序。

我已经做了很多搜索,但我遇到的解决方案似乎都不适用于新的 Swift 语言,我不确定这是否可能是一个错误......

我已经尝试过:

var descriptor: NSSortDescriptor = NSSortDescriptor(key: "name", ascending: true)
var sortedResults: NSArray = results.sortedArrayUsingDescriptors(NSSortDescriptor(key: "name", ascending: true))

但是这不会编译并提示“NSSortDescriptor 无法转换为 [AnyObject]”。

有什么建议吗?

ios arrays sorting dictionary swift
3个回答
33
投票

您必须传递一组排序描述符(即使只有一个):

let descriptor = NSSortDescriptor(key: "name", ascending: true)
let sortedResults = results.sortedArray(using: [descriptor])

原始答案(我相信对于 Swift 1):

var descriptor: NSSortDescriptor = NSSortDescriptor(key: "name", ascending: true)
var sortedResults: NSArray = results.sortedArrayUsingDescriptors([descriptor])

12
投票

与其采用旧的方式,为什么不拥抱新的方式呢? swift Array 类型同时具有

sort
sorted
方法。您可以提供一个闭包作为排序函数:

var sortedResults= results.sorted {
  (dictOne, dictTwo) -> Bool in 
  // put your comparison logic here
  return dictOne["name"]! > dictTwo["name"]!
}

0
投票
var arrDescriptor = NSSortDescriptor(key: "", ascending: true)
   var sortDescriptors: NSArray = [arrDescriptor]
   _sortedArray = allKeysArray.sortedArrayUsingDescriptors(sortDescriptors as [AnyObject])

   print(_sortedArray)
© www.soinside.com 2019 - 2024. All rights reserved.