在 Swift 中对 NSDictionary 对象的 NSArray 进行排序
Posted
技术标签:
【中文标题】在 Swift 中对 NSDictionary 对象的 NSArray 进行排序【英文标题】:Sort NSArray of NSDictionary objects in Swift 【发布时间】: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]”。
有什么建议吗?
【问题讨论】:
阅读错误内容:它需要一个数组... 【参考方案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 类型同时具有sort
和sorted
方法。您可以提供一个闭包作为排序函数:
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)
【讨论】:
以上是关于在 Swift 中对 NSDictionary 对象的 NSArray 进行排序的主要内容,如果未能解决你的问题,请参考以下文章