2016-02-26 201 views
0

我做了一个[String: [String]]类型的字典。这些值代表一个名称列表,而键代表所有这些名称的首字母。得到它了?Unicode特殊字符转换

好的。现在我可以通过检测它们的第一个字母的算法将名称附加到它们的键阵列。这是我的问题开始的地方。我想将以特殊字符开头的名称放入"O"-key-array,例如"Ø"

事情是这样的:

"Øder" ----->算法检测第一个字母------>["0": ["Øder", ...]]

我的方法是第一个字母转换为它们的Unicode和检查它是一个特殊字符并将其转换为相关的拉丁字母。

这是要走的路,还是我没有考虑过的更简单的解决方案?

+6

你为什么要为Python和Swift标记这个问题? –

+0

也,你使用python2或3? – timgeb

+0

在Python中,您可以使用['unidecode'](https://pypi.python.org/pypi/Unidecode)将字符转换为最接近的ASCII等效字符。 –

回答

0

这斯威夫特效果很好:

let names = ["test", "another", "two", "øder"] 

let index = names.reduce([Character: [String]]()) { 
    (var initial: [Character: [String]], current: String) -> [Character: [String]] in 
    if let first = current.characters.first 
    where initial[first]?.append(current) == nil { 
     initial[first] = [current] 
    } 

    return initial 
} 

print(index) // -> ["ø": ["øder"], "t": ["test", "two"], "a": ["another"]] 

遗憾的是我没能找到Unicode字符转换为一个简单的ASCII格式的任何功能。也许某种字典可以用这种映射创建。

+0

没问题,很乐意帮忙。当然,它可以被改进以更好地处理大写和小写,符号,Unicode字形等。 – ColGraff