我的Firestore数据库包含带重音字符的单词,例如急性(é),代字号(ñ),变音符号(ü)和cedilla(ç)。
我已经创建了一个按此字段排序的自定义索引,但是没有正确定位带有此类字符的字词。
预期订单示例:
[“Água”,“Amigo”,“Barro”,“Casa”]
我从Firestore获得的内容:
[“Amigo”,“Barro”,“Casa”,“Água”]
我的查询是这样的:
let query = historyRef.whereField("createdByUserID", isEqualTo: state.loggedUser.uid).order(by: "itemName", descending: false)
有关如何修复它的任何指示?
提前致谢。
答案 0 :(得分:1)
据我所知,Firebase没有内置选项来排序忽略变音标记。您可以做的是向对象添加foldedName
属性,然后对其进行Firebase排序。要获得折叠名称,请使用
itemName.folding(options: [.diacriticInsensitive, .caseInsensitive], locale: Locale.current)
答案 1 :(得分:0)
您可以像这样订购数组:
var array = ["Amigo", "Barro", "Casa", "Água"]
array = array.sorted(by: {
$0.lowercased().folding(options: .diacriticInsensitive, locale: .current)
<
$1.lowercased().folding(options: .diacriticInsensitive, locale: .current)
})
答案 2 :(得分:0)
我还遇到了一个对带有变音符号的字符串(即“Pâté”)进行排序的问题。我当时使用NSSortDescriptor对从Core Data获取的项目进行排序,但事实证明NSSortDescriptor不能很好地对这种字符串进行排序。
因此,我在没有NSSortDescriptor的情况下获取了项目数组,然后用以下方法手动对其进行了排序:
func sortArray() {
array.sort(by: { item1, item2 in
return item1.itemName?.localizedStandardCompare((item2.itemName)!) == .orderedAscending } )
}