[英]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.