6 arrays sorting nsdictionary ios swift
我是Swift和Objective-C的新手.
我有一个表视图控制器,我在其中声明了一个字典和一个数组:
var parts = [:]
var partsSectionTitles: NSArray!
Run Code Online (Sandbox Code Playgroud)
在我的viewDidLoad函数中,我有:
parts = [
"Part 1" : ["X:1", "X:2", "X:3"],
"Part 2" : ["X:1", "X:2"],
"Part 3" : ["X:1"]
]
var partsSectionTitles = parts.allKeys
Run Code Online (Sandbox Code Playgroud)
我已经在Objective-C中成功完成了这个表视图控制器,并且为了按字母顺序对partsSectionTitles进行排序,我使用了:
partsSectionTitles = [[parts allKeys] sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)];
Run Code Online (Sandbox Code Playgroud)
所以,我的问题是:如何在Swift中编写前面的Objective-C代码?提前感谢您的回答.
更新:我能够使用您提供的答案中的点点滴滴来解决问题.所以谢谢!这就是我所拥有的:
我将零件字典声明为:
var parts = [String:[String]]()
Run Code Online (Sandbox Code Playgroud)
这让我可以为每个键提供多个值.这是一个巨大的帮助.
然后我就能够创建partsSectionTitles并对其进行排序:
partsSectionTitles = [String](parts.keys)
partsSectionTitles.sort(){ $0 < $1 }
Run Code Online (Sandbox Code Playgroud)
这很有效,因为我没有收到错误.
gab*_*ler 10
这应该符合您的需要.该数组包含String元素.
var partsSectionTitles:[String] = partsOfNovel.allKeys as [String]
var sortedNames = partsSectionTitles.sorted { $0.localizedCaseInsensitiveCompare($1) == NSComparisonResult.OrderedDescending }
Run Code Online (Sandbox Code Playgroud)
一个很好的Quicksort函数来订购你的字符串数组怎么样?(来源)
首先创建一个Array扩展来分解给定的数组:
extension Array {
var decompose : (head: T, tail: [T])? {
return (count > 0) ? (self[0], Array(self[1..<count])) : nil
}
}
Run Code Online (Sandbox Code Playgroud)
第二步创建Quicksort函数,以便您可以订购分解的数组:
func qsort(input: [String]) -> [String] {
if let (pivot, rest) = input.decompose {
let lesser = rest.filter { $0 < pivot }
let greater = rest.filter { $0 >= pivot }
return qsort(lesser) + [pivot] + qsort(greater)
} else {
return []
}
}
Run Code Online (Sandbox Code Playgroud)
使用显式类型(Dictionary和Array)声明变量:
var partsOfNovel = [?String? : [String]]()
var partsSectionTitles = [String]()
Run Code Online (Sandbox Code Playgroud)
填写他们:
partsOfNovel = [
"Part 1" : ["Chapter X:1", "Chapter X:2", "Chapter X:3"],
"Part 2" : ["Chapter X:1", "Chapter X:2"],
"Part 3" : ["Chapter X:1"]
]
partsSectionTitles = partsOfNovel.allKeys
// ["Part 1", "Part 3", "Part 2"]
Run Code Online (Sandbox Code Playgroud)
最后订购你的Strings Array:
var orderedSectionTitles = qsort(partsSectionTitles)
// ["Part 1", "Part 2", "Part 3"]
Run Code Online (Sandbox Code Playgroud)
我认为纯粹的Swift是一个很好的解决方案,我希望它有所帮助!
| 归档时间: |
|
| 查看次数: |
15494 次 |
| 最近记录: |