使用Swift对日语字符进行排序

时间:2019-01-26 04:39:29

标签: ios swift sorting localization

我有以下一行按名称对项目列表进行排序:

let nameSort = NSSortDescriptor(key: "item.itemName", ascending: true, selector: #selector(NSString.caseInsensitiveCompare))

这对于英文名称很好用。但是,对于日语,它将平假名,片假名和汉字分开而不是交织在一起。我注意到iOS联系人应用程序排序正确,并且没有划分三个单独的脚本。想知道如何实现?

1 个答案:

答案 0 :(得分:1)

您可以使用localizedComparelocalizedCaseInsensitiveCompare解决平假名v片假名排序问题,但不能解决汉字问题。

您将其与“通讯录”应用进行比较:不幸的是,通讯录实际上是captures what you enter phonetically,将折纸写在单独的phoneticFamilyName中(例如,田中(aka)称为カカ),而最终的汉字(例如,田中)例如存储在familyName中。这样做是因为一旦将输入翻译为汉字,所有读数都将映射到单个unicode序列。例如。无论您是通过チュウ还是enter输入中(取决于您输入的单词),生成的中字符仍然只是Unicode 0x4e2d。如果您想知道如何找到该字符,则需要将语音拼写保存在单独的字段中。

最底线,是要让排序算法找出某个汉字随机序列的假名是一个不小的问题,因为它无法知道yomi 或 > kun yomi nanori 适用于任何给定的汉字。这就是“联系人”应用程序将其存储在单独字段中的原因。在假名和罗马字之间有CFStringTransform转换,但对于汉字则没有。

从理论上讲,可以对字符串进行一些自然语言处理和/或字典解析,但这在我看来确实是可行的,但是这使我感到相当耗费计算能力,并且试图在排序例程中及时进行该操作可能不切实际。我建议将平假名存储在与Contacts框架一样的单独字段中。