【问题标题】:Sort NSArray of NSDictionary objects in Swift在 Swift 中对 NSDictionary 对象的 NSArray 进行排序
【发布时间】:2014-09-01 08:11:21
【问题描述】:

我从 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


【解决方案1】:

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

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

【讨论】:

  • 使用 xcode 6.1 这给了我一个 'Cannot convert the expression's type '$T7??键入“NSSortDescriptor”,因为我像这样定义了 NSArray var valores = NSMutableArray(contentsOfFile: file) 有什么建议吗?任何帮助都将受到欢迎
  • 太棒了!搜索 2 天后唯一有效的示例!非常感谢。
  • 如果你在 Objective-C 中有这个 -> NSArray *array = [[dictionary allKeys] sortedArrayUsingSelector:@selector(compare:)];有人知道 Swift 中的替代方案吗?
【解决方案2】:

为什么不采用旧方式,而不是采用新方式呢? swift Array 类型同时具有sortsorted 方法。您可以提供一个闭包作为排序函数:

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

【讨论】:

  • 或者,这可以在一行中完成:var sortedResults= results.sorted { $0["name"]! > $1["name"]! }
  • 确实可以,但我猜 OP 对 Swift 来说有点新,所以我选择了更冗长的闭包语法!
  • 我确实是 Swift 新手,我之前确实尝试过,但无法成功。我想我看到了我错过的东西,稍后会给你一个答案。谢谢!
  • 我相信这会奏效,但我在从 NSArray 桥接到 Array 时遇到了各种麻烦……Kambala 下面的回答虽然有效,但我可以继续使用 NSArray。
  • 如何对多个排序描述符做同样的事情?
【解决方案3】:
var arrDescriptor = NSSortDescriptor(key: "", ascending: true)
   var sortDescriptors: NSArray = [arrDescriptor]
   _sortedArray = allKeysArray.sortedArrayUsingDescriptors(sortDescriptors as [AnyObject])

   print(_sortedArray)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多