繁体   English   中英

从数组Swift生成按字母排序的字典

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM