[英]Generate Sorted Dictionary by Letters from an Array Swift
我有很多部門的名字
var departments: Array<String>!
我想按字典中的字母順序對數組進行排序,例如字典應該像這樣
var MyDictionary = ["A": ["Affenpoo", "Affenpug", "Affenshire", "Affenwich", "Afghan Collie", "Afghan Hound"], "B": ["Bagle Hound", "Boxer"],
"C": ["Cagle Cound", "Coxer"]]
部門數組不是靜態的
如何快速生成此詞典?
非常感謝
我的方法是迭代數組並采用每個條目的首字母。 從字典中檢索該字母的數組。 如果為零,則創建一個新數組。 將單詞添加到檢索到的數組中,然后將該數組存儲在字典中。
let departments = ["Affenpoo", "Affenpug", "Affenshire", "Affenwich", "Afghan Collie","Cagle Cound", "Coxer"]
var outputDict=[String:[String]]()
for word in departments {
let initialLetter=word.substringToIndex(word.startIndex.advancedBy(1)).uppercaseString
var letterArray=outputDict[initialLetter] ?? [String]()
letterArray.append(word)
outputDict[initialLetter]=letterArray
}
print(outputDict)
[“ C”:[“ Cagle Cound”,“ Coxer”],“ A”:[“ Affenpoo”,“ Affenpug”,“ Affenshire”,“ Affenwich”,“阿富汗牧羊犬”]]
編輯:Paulw11的解決方案更有效
我認為這個問題與swift無關,但是無論如何,請嘗試以下操作:
let a = ["All", "Cat", "red", "gat", "Star sun", "bet you", "Zeta Fog", "Tea", "Fox"]
let b = a.map{ $0.lowercaseString }
let c = b.sort()
let d = c.map{ $0[$0.startIndex.advancedBy(0)]}
var dictionary:[String:[String]] = [:]
let byInitial = d.map{ initial in
let clustered = c.filter{$0.hasPrefix("\(initial)")}
dictionary.updateValue(clustered, forKey:"\(initial)")
}
print("\(dictionary)")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.