![](/img/trans.png)
[英]Swift 4 Dictionary [String : AnyObject] sort by key in alphabetical order
[英]Swift: Sort Array in Alphabetical Order
我是Swift和Objective-C的新手。
我有一個表視圖控制器,我在其中聲明了一個字典和一個數組:
var parts = [:]
var partsSectionTitles: NSArray!
在我的viewDidLoad函數中,我有:
parts = [
"Part 1" : ["X:1", "X:2", "X:3"],
"Part 2" : ["X:1", "X:2"],
"Part 3" : ["X:1"]
]
var partsSectionTitles = parts.allKeys
我已經在Objective-C中成功完成了這個表視圖控制器,並且為了按字母順序對partsSectionTitles進行排序,我使用了:
partsSectionTitles = [[parts allKeys] sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)];
所以,我的問題是:如何在Swift中編寫前面的Objective-C代碼? 提前感謝您的回答。
更新:我能夠使用您提供的答案中的點點滴滴來解決問題。 所以謝謝! 這就是我所擁有的:
我將零件字典聲明為:
var parts = [String:[String]]()
這讓我可以為每個鍵提供多個值。 這是一個巨大的幫助。
然后我就能夠創建partsSectionTitles並對其進行排序:
partsSectionTitles = [String](parts.keys)
partsSectionTitles.sort(){ $0 < $1 }
這很有效,因為我沒有收到錯誤。
這應該符合您的需要。 該數組包含String元素。
var partsSectionTitles:[String] = partsOfNovel.allKeys as [String]
var sortedNames = partsSectionTitles.sorted { $0.localizedCaseInsensitiveCompare($1) == NSComparisonResult.OrderedDescending }
一個很好的Quicksort函數來訂購你的字符串數組怎么樣? ( 來源 )
首先創建一個Array擴展來分解給定的數組:
extension Array {
var decompose : (head: T, tail: [T])? {
return (count > 0) ? (self[0], Array(self[1..<count])) : nil
}
}
第二步創建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 []
}
}
使用顯式類型(Dictionary和Array)聲明變量:
var partsOfNovel = [String : [String]]()
var partsSectionTitles = [String]()
填寫他們:
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"]
最后訂購你的Strings Array:
var orderedSectionTitles = qsort(partsSectionTitles)
// ["Part 1", "Part 2", "Part 3"]
我認為純粹的Swift是一個很好的解決方案,我希望它有所幫助!
let array = ["j","d","k","h","m"]
func backward(x : String, y: String) -> Bool
{
return x>y
}
var reverse = sorted(array,backward)
println((reverse))
或者你可以這樣寫:
var newrev = sorted(array, {$0 < $1})
要么
var other = sorted (array , >)
假設你有NSDictionary
和NSArray
的以下Objective-C代碼:
NSDictionary *partsOfNovel = @{@"Part 1" : @[@"Chapter X:1", @"Chapter X:2", @"Chapter X:3"],
@"Part 4" : @[@"Chapter X:1", @"Chapter X:2"],
@"Part 3" : @[@"Chapter X:1"]};
NSArray *partsSectionTitles = [[partsOfNovel allKeys] sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)];
NSLog(@"%@", partsSectionTitles);
使用此代碼,您的控制台將打印:
"Part 1",
"Part 3",
"Part 4"
使用Swift,您可以獲取Dictionary
的鍵並將它們放入這樣的Array
:
let partsOfNovel = [
"Part 1" : ["Chapter X:1", "Chapter X:2", "Chapter X:3"],
"Part 4" : ["Chapter X:1", "Chapter X:2"],
"Part 3" : ["Chapter X:1"]]
let nonOrderedPartsSectionTitles = partsOfNovel.keys.array
然后,您可以對此Array
應用排序並打印結果,如下所示:
let partsSectionTitles = nonOrderedPartsSectionTitles.sorted { $0.localizedCaseInsensitiveCompare($1) == NSComparisonResult.OrderedAscending }
println(partsSectionTitles) //[Part 1, Part 3, Part 4]
但所有這些都可以通過Swift以簡潔的方式完成(使用Playground測試):
let partsOfNovel = [
"Part 1" : ["Chapter X:1", "Chapter X:2", "Chapter X:3"],
"Part 4" : ["Chapter X:1", "Chapter X:2"],
"Part 3" : ["Chapter X:1"]]
let partsSectionTitles = partsOfNovel.keys.array.sorted { $0.0 < $1.0 }
println(partsSectionTitles) //[Part 1, Part 3, Part 4]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.